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:
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.
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:
J'ai écrit le message que Kevin a souligné .