Toute requête impliquant plusieurs tables nécessite une certaine forme d'association pour lier les résultats de la table "A" à la table "B". Le moyen traditionnel (ANSI-89) de le faire est de :
- Répertorier les tables impliquées dans une liste séparée par des virgules dans la clause FROM
-
Ecrire l'association entre les tables dans la clause WHERE
SELECT * FROM TABLE_A a, TABLE_B b WHERE a.id = b.id
Voici la requête réécrite à l'aide de la syntaxe ANSI-92 JOIN :
SELECT *
FROM TABLE_A a
JOIN TABLE_B b ON b.id = a.id
Du point de vue des performances :
Lorsqu'il est pris en charge (Oracle 9i+, PostgreSQL 7.2+, MySQL 3.23+, SQL Server 2000+), il n'y a aucun avantage en termes de performances à utiliser l'une ou l'autre syntaxe par rapport à l'autre. L'optimiseur les considère comme la même requête. Mais les requêtes plus complexes peuvent bénéficier de l'utilisation de la syntaxe ANSI-92 :
- Capacité à contrôler l'ordre JOIN - l'ordre dans lequel les tables sont analysées
- Possibilité d'appliquer des critères de filtrage sur une table avant de rejoindre
Du point de vue de la maintenance :
Il existe de nombreuses raisons d'utiliser la syntaxe ANSI-92 JOIN plutôt que ANSI-89 :
- Plus lisible, car le critère JOIN est distinct de la clause WHERE
- Moins susceptibles de manquer les critères JOIN
- Prise en charge cohérente de la syntaxe pour les types JOIN autres que INNER, ce qui facilite l'utilisation des requêtes sur d'autres bases de données
- La clause WHERE sert uniquement de filtrage du produit cartésien des tables jointes
Du point de vue de la conception :
La syntaxe ANSI-92 JOIN est un modèle, pas un anti-modèle :
- Le but de la requête est plus évident ; les colonnes utilisées par l'application sont claires
- Il suit la règle de modularité concernant l'utilisation d'un typage strict chaque fois que possible. Explicit est presque universellement meilleur.
Conclusion
À court de familiarité et/ou de confort, je ne vois aucun avantage à continuer à utiliser la clause ANSI-89 WHERE au lieu de la syntaxe ANSI-92 JOIN. Certains pourraient se plaindre que la syntaxe ANSI-92 est plus détaillée, mais c'est ce qui la rend explicite. Plus c'est explicite, plus c'est facile à comprendre et à maintenir.