Non c'è alcuna differenza nel motore di query sql.
Per la leggibilità, quest'ultimo è molto più facile da leggere se si utilizzano interruzioni di riga e rientro.
Per INNER JOINs, non importa se si inseriscono "filters" e "joins" nella clausola ON o WHERE, il Query Optimizer dovrebbe decidere comunque cosa fare prima (potrebbe scegliere di fare prima un filtro, un join in seguito, o viceversa
Per OUTER JOINs tuttavia, c'è una differenza, e talvolta si vuole mettere la condizione nella clausola ON, a volte nel WHERE. Mettendo una condizione nella clausola WHERE per un JOIN OUTER può girare in un INNER JOIN (a causa di come lavorano NULL)
Ad esempio, verificare la leggibilità tra i due seguenti campioni:
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
Non c'è alcuna differenza per questa query, ma per altre query ci sono alcune cose che puoi fare con la sintassi di stile 'INNER JOIN' che non puoi fare con la sintassi di stile a, b. –
Joel: molto vero :) –