Para las INNERuniones, no, el orden no importa. Las consultas devolverán los mismos resultados, siempre que cambie sus selecciones de SELECT *a SELECT a.*, b.*, c.*.
Para ( LEFT, RIGHTo FULL) OUTERuniones, sí, el orden importa, y las cosas ( actualizadas ) son mucho más complicadas.
Primero, las uniones externas no son conmutativas, por a LEFT JOIN blo que no es lo mismo queb LEFT JOIN a
Las uniones externas tampoco son asociativas, por lo que en sus ejemplos que involucran ambas propiedades (conmutatividad y asociatividad):
a LEFT JOIN b
ON b.ab_id = a.ab_id
LEFT JOIN c
ON c.ac_id = a.ac_id
es equivalente a :
a LEFT JOIN c
ON c.ac_id = a.ac_id
LEFT JOIN b
ON b.ab_id = a.ab_id
pero:
a LEFT JOIN b
ON b.ab_id = a.ab_id
LEFT JOIN c
ON c.ac_id = a.ac_id
AND c.bc_id = b.bc_id
no es equivalente a :
a LEFT JOIN c
ON c.ac_id = a.ac_id
LEFT JOIN b
ON b.ab_id = a.ab_id
AND b.bc_id = c.bc_id
Otro (con suerte más simple) ejemplo de asociatividad. Piense en esto como (a LEFT JOIN b) LEFT JOIN c:
a LEFT JOIN b
ON b.ab_id = a.ab_id -- AB condition
LEFT JOIN c
ON c.bc_id = b.bc_id -- BC condition
Esto es equivalente a a LEFT JOIN (b LEFT JOIN c):
a LEFT JOIN
b LEFT JOIN c
ON c.bc_id = b.bc_id -- BC condition
ON b.ab_id = a.ab_id -- AB condition
solo porque tenemos ONcondiciones "agradables" . Ambos ON b.ab_id = a.ab_idy c.bc_id = b.bc_idson controles de igualdad y no implican NULLcomparaciones.
Incluso puede tener condiciones con otros operadores o más complejos como: ON a.x <= b.xo ON a.x = 7o ON a.x LIKE b.xo ON (a.x, a.y) = (b.x, b.y)y las dos consultas seguirían siendo equivalentes.
Sin embargo, si alguno de estos está involucrado IS NULLo una función que está relacionada con valores nulos como COALESCE(), por ejemplo, si la condición era b.ab_id IS NULL, entonces las dos consultas no serían equivalentes.
<blahblah>? ¿Estás uniendo A a B y A a C, o estás uniendo A a B y B a C?