Vaut-il mieux utiliser un INNER JOIN ... ON ... ou un WHERE (syntaxe à virgule) ?

Pour faire une jointure entre 2 tables, est-il préférable de faire ceci :
 

Code sql :
 SELECT * FROM 
tableA, tableB
* WHERE tableA.refB = tableB.id ;

ou bien cela :

Code sql :

 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).