Para INNER
une, no, el orden no es importante. Las consultas devolverán los mismos resultados, siempre y cuando cambie sus selecciones de SELECT *
a SELECT a.*, b.*, c.*
.
Para (LEFT
, RIGHT
o FULL
) OUTER
une, sí, las cuestiones de orden - y (actualizados) las cosas son mucho más complicadas.
En primer lugar, combinaciones externas no son conmutativas, así a LEFT JOIN b
no es lo mismo que b LEFT JOIN a
combinaciones externas no son asociativos o bien, por lo que en sus ejemplos que involucran tanto (conmutatividad y asociatividad) Propiedades:
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 (esperemos más simple) ejemplo 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
Este es equivalente aa 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
sólo porque tenemos "buenos" ON
condiciones. Ambos ON b.ab_id = a.ab_id
y c.bc_id = b.bc_id
son controles de igualdad y no implican comparaciones NULL
.
Usted puede incluso tener condiciones con otros operadores o los más complejos como: ON a.x <= b.x
o ON a.x = 7
o ON a.x LIKE b.x
o ON (a.x, a.y) = (b.x, b.y)
y las dos consultas seguirían siendo equivalente.
Sin embargo, si cualquiera de estos implicados IS NULL
o una función que se relaciona con los valores nulos como COALESCE()
, por ejemplo, si la condición era b.ab_id IS NULL
, a continuación, las dos consultas no serían equivalentes.
¿Qué es ''? ¿Estás uniendo A a B y A a C, o estás uniendo A a B y B a C? –
beny23
Hola Beny, el código en mi pregunta es una abstracción. No me importa unirme a A to B o A to C, solo quiero saber si la sintaxis de ese tipo proporcionará resultados idénticos. –