Bueno, es el orden de las operaciones ..
SELECT
t1.*
FROM
table1 t1
INNER JOIN table2 t2
LEFT JOIN table3 t3 ON t3.table3_ID = t2.table2_ID
ON t2.table2_ID = t1.table1_ID
podría ser reescrita como:
SELECT
t1.*
FROM
table1 t1 -- inner join t1
INNER JOIN
(table2 t2 LEFT JOIN table3 t3 ON t3.table3_ID = t2.table2_ID) -- with this
ON t2.table2_ID = t1.table1_ID -- on this condition
Así que, básicamente, primero LEFT JOIN T2 con t3, en base a la condición de unión: table3_ID = table2_ID, entonces combinación interna t1 con t2 en table2_ID = table1_ID.
En su segundo ejemplo, primero INNER UNE t1 con t2, y luego IZQUIERDA UNIENDO la unión interna resultante con la tabla t3 en la condición table2_ID = table1_ID.
SELECT
t1.*
FROM
table1 t1
INNER JOIN table2 t2 ON t2.table2_ID = t1.table1_ID
LEFT JOIN table3 t3 ON t3.table3_ID = t2.table2_ID
podría reescribirse como:
SELECT
t1.*
FROM
(table1 t1 INNER JOIN table2 t2 ON t2.table2_ID = t1.table1_ID) -- first inner join
LEFT JOIN -- then left join
table3 t3 ON t3.table3_ID = t2.table2_ID -- the result with this
EDITAR
me disculpo. Mi primer comentario fue incorrecto. Las dos consultas producirán los mismos resultados, pero puede haber una diferencia en el rendimiento, ya que la primera consulta puede realizar un proceso más lento que la segunda consulta en algunos casos (cuando la tabla 1 contiene solo un subconjunto de los elementos en la tabla 2) como LEFT JOIN ser ejecutado primero - y solo entonces cruzado con la tabla1. A diferencia de la segunda consulta que permite que el optimizador de consultas haga su trabajo.
¿Dan el mismo resultado cuando las ejecuta? –
+1 por hacerme ir "Hm ..." – Tomalak
Es muchísimo más fácil entender el segundo que el primero, incluso si pones (parens) alrededor del LOJ en el primero. Esperando votar una buena respuesta en este caso. –