Il n'y a pas de différence avec le moteur de recherche sql. Pour des raisons de lisibilité, cette dernière est beaucoup plus facile à lire si vous utilisez des sauts de ligne et des indentations. Pour INNER JOINs, peu importe si vous mettez des "filtres" et des "jointures" dans la clause ON ou WHERE, l'optimiseur de requêtes doit décider quoi faire en premier (il peut choisir de faire un filtre en premier, une jointure plus tard, ou vice versa
Pour les JOINTS EXTERNES cependant, il y a une différence, et parfois vous voudrez mettre la condition dans la clause ON, parfois dans le WHERE Mettre une condition dans la clause WHERE pour un OUTER JOIN peut tourner dans un INNER JOIN (à cause de la façon dont fonctionnent les valeurs NULL)
Par exemple, vérifier la lisibilité entre les deux exemples suivants:
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
Il n'y a pas de différence pour cette requête, mais pour d'autres requêtes, il y a certaines choses que vous pouvez faire avec la syntaxe de style 'INNER JOIN' que vous ne pouvez pas faire avec la syntaxe a, b. –
Joel: Très vrai :) –