Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Les requêtes ANSI JOIN et non-ANSI JOIN fonctionneront-elles différemment ?

Les deux requêtes sont identiques, sauf que la seconde est la syntaxe SQL ANSI-92 et la première est l'ancienne syntaxe SQL qui n'incorporait pas la clause join. Ils doivent produire exactement le même plan de requête interne, bien que vous souhaitiez peut-être vérifier.

Vous devez utiliser la syntaxe ANSI-92 pour plusieurs raisons

  • L'utilisation de la clause JOIN sépare la logique de relation de la logique de filtre (le WHERE) et est donc plus propre et plus facile à comprendre.
  • Cela n'a pas d'importance avec cette requête particulière, mais il y a quelques circonstances où l'ancienne syntaxe de jointure externe (utilisant + ) est ambiguë et les résultats de la requête dépendent donc de l'implémentation - ou la requête ne peut pas être résolue du tout. Cela ne se produit pas avec ANSI-92
  • C'est une bonne pratique car la plupart des développeurs et des administrateurs de base de données utilisent ANSI-92 de nos jours et vous devez suivre la norme. Tous les outils de requête modernes généreront certainement ANSI-92.
  • Comme l'a souligné @gbn, cela a tendance à éviter les jointures croisées accidentelles.

Moi-même, j'ai résisté à ANSI-92 pendant un certain temps car il y a un léger avantage conceptuel à l'ancienne syntaxe car il est plus facile d'envisager le SQL comme une jointure cartésienne de masse de toutes les tables utilisées suivie d'une opération de filtrage - une technique mentale qui peut être utile pour comprendre ce que fait une requête SQL. Cependant, j'ai décidé il y a quelques années que je devais évoluer avec le temps et après une période d'adaptation relativement courte, je le préfère maintenant fortement - principalement à cause de la première raison donnée ci-dessus. Le seul endroit où l'on devrait s'écarter de la syntaxe ANSI-92, ou plutôt ne pas utiliser l'option, c'est avec des jointures naturelles qui sont implicitement dangereuses.