Pour faire une jointure entre 2 tables, est-il préférable de faire ceci :
1 2 3
| SELECT *
FROM tableA, tableB
WHERE tableA.refB = tableB.id ; |
ou bien cela :
1 2 3 4
| SELECT *
FROM tableA
INNER JOIN tableB
ON tableA.refB = tableB.id ; |
?
De nombreuses personnes choisiront la solution avec le WHERE parce que "c'est moins long à écrire". Ceci n'est pas une raison suffisante !
Il vaut mieux utiliser le INNER JOIN pour les raisons suivantes :
C'est une jointure que vous souhaitez faire, pas un produit cartésien
Avec le INNER JOIN, on voit très clairement comment sont faites les jointures
Le type de jointure (INNER, LEFT OUTER...) apparait de manière explicite
Le INNER JOIN est beaucoup plus propre: on fait très clairement la différence entre les conditions de jointures (dans le ON) et les conditions de restriction (dans le WHERE)
Cette clarté permet une meilleure localisation des bugs (en particulier sur des requêtes faisant intervenir plusieurs jointures)
Pour effectuer certaines optimisations , le SGBD se base sur les jointures. Si à la place vous utilisez un produit cartésien, aucune optimisation ne sera effectuée
Il faut donc utiliser le INNER JOIN et adopter une indentation permettant une lecture facile de la requête SQL (nombreux sauts de lignes).
Partager