No hay diferencia con el motor de consulta SQL.
Para legibilidad, este último es mucho más fácil de leer si usa saltos de línea y sangría.
Para INNER JOINs, no importa si coloca "filtros" y "uniones" en la cláusula ON o WHERE, el optimizador de consultas debe decidir primero qué hacer (puede optar primero por un filtro, unir más adelante, o viceversa
Para OUTER JOINs, sin embargo, hay una diferencia, y algunas veces querrás poner la condición en la cláusula ON, a veces en WHERE. Poner una condición en la cláusula WHERE para una OUTER JOIN puede volverse en un INNER JOIN (debido a cómo funcionan los nulos)
Por ejemplo, comprobar la legibilidad entre las dos muestras siguientes:
SELECT c.customer_no, o.order_no, a.article_no, r.price
FROM customer c, order o, orderrow r, article a
WHERE o.customer_id = c.customer_id
AND r.order_id = o.order_id
AND a.article_id = r.article_id
AND o.orderdate >= '2003-01-01'
AND o.orderdate < '2004-01-01'
AND c.customer_name LIKE 'A%'
ORDER BY r.price DESC
vs
SELECT c.customer_no, o.order_no, a.article_no, r.price
FROM customer c
INNER JOIN order o
ON o.customer_id = c.customer_id
AND o.orderdate >= '2003-01-01'
AND o.orderdate < '2004-01-01'
INNER JOIN orderrow r
ON r.order_id = o.order_id
INNER JOIN article a
ON a.article_id = r.article_id
WHERE c.customer_name LIKE 'A%'
ORDER BY r.price DESC
No hay diferencia para esta consulta, pero para otras consultas hay algunas cosas que puede hacer con la sintaxis de estilo 'INNER JOIN' que no se puede hacer con la sintaxis de estilo a, b. –
Joel: Muy cierto :) –