Quelle syntaxe de jointure est la meilleure?

Nous migrons donc d'Informix vers Sql Server. Et j'ai remarqué que dans Informix les requêtes sont écrites de cette manière:

select [col1],[col2],[col3],[col4],[col5] from tableA, tableB where tableA.[col1] = table.[gustavs_custom_chrome_id] 

Alors que toutes les requêtes que j'écris dans SQL Server sont écrites comme suit:

 select [col1],[col2],[col3],[col4],[col5] from tableA inner join tableB on tableA.[col1] = table.[gustavs_custom_chrome_id] 

Maintenant, ma première pensée était: cette première requête est mauvaise. Il crée probablement cet set d'loggings énorme puis réduit à l'set d'loggings réels en utilisant la clause Where. Par conséquent, c'est mauvais pour la performance. Et c'est non-ansi. Donc c'est double.

Cependant, après quelques searchs sur google, il semble que les deux sont, en théorie, à peu près les mêmes. Et ils sont tous les deux conforms à l'ANSI.

Donc mes questions sont:

  1. Est-ce que les deux requêtes fonctionnent de la même manière? C'EST À DIRE. fonctionne tout aussi rapidement et donne toujours la même réponse.
  2. Les deux sont-ils vraiment conforms à ANSI?
  3. Y a-t-il des raisons exceptionnelles pour lesquelles je devrais pousser pour un style plutôt qu'un autre? Ou devrais-je juste laisser assez bon seul?

    Remarque: ce ne sont que des exemples de requêtes. J'ai vu quelques requêtes (du premier type) join jusqu'à 5 tables à la fois.

    Eh bien, "mieux" est subjectif. Il y a du style ici. Mais je vais répondre à vos questions directement.

    1. Les deux effectuent la même chose
    2. Les deux sont conforms à ANSI.
    3. Le problème avec le premier exemple est que

      • il est très facile de dériver par inadvertance le produit croisé (puisqu'il est plus facile d'omettre les critères de jointure)

      • il devient également difficile de déboguer les critères de jointure lorsque vous ajoutez de plus en plus de tables à la jointure

      • puisque la syntaxe de la jointure externe de style ancien (* =) a été dépréciée ( il a longtime été documenté pour renvoyer des résultats incorrects ), lorsque vous devez introduire des jointures externes, vous devez mélanger nouveau style et anciennes jointures de style … incohérence?

      • alors que ce n'est pas exactement l'autorité sur les meilleures pratiques, Microsoft recommand une syntaxe explicite INNER / OUTER JOIN

      • avec la dernière méthode:

        • vous utilisez une syntaxe de jointure cohérente indépendamment de l'interne / de l'externe
        • il est plus difficile (pas impossible) de dériver accidentellement le produit croisé
        • isoler les critères de jointure des critères de filtrage peut faciliter le debugging

    J'ai écrit le message que Kevin a souligné .