Pour des raisons de lisibilité.
Une jointure c'est une spécification sur condition comme une autre, mais ça reste une manière de spécifier les données qu'on veut, c'est un peu entre le where et le from en ce sens et donc c'est plus lisible quand on fait effectivement la jointure entre le where et le from avec les opérateurs join
Heu non. N'importe qui qui ecrit du SQL doit comprendre l'equivalence entre jointure et produit cartesien + restriction. C'est meme la definition formelle de la jointure. En terme de lisibilite, j'ai separer les conditions de jointure des autres conditions par un retour a la ligne. Et de toute facon, on ecrit jamais de requete comme ca dans la vraie vie. Tu les ecris toujours avec des intermedaires symbolique pour trouver aider la lisibilite et modularise le code.
Et de plus ça permet de prendre l'habitude parce qu'il y a de cas de jointures plus exotiques ou c'est encore plus avatageux et y compris niveau optimisation
Non!
Si tu as besoin d'une jointure plus exotique, tu feras une jointure plus exotique. Mais bon, les jointure ce n'est jamais tres exotique pour commencer. La seule difference est ce que tu prends les champs NULL ou pas. et que tu l'exprime avec un INNER JOIN/FULL JOIN/whatever JOIN ou que tu l'exprime avec un produit cartesien et des restriction qui vont bien, ca ne change absolument rien. Les requetes sont equivalentes. Elles sont represente par des arbres d'expression equivalent. Et certainement le planificateur d'execution prendra l'arbre d'expression equivalent qui minimise le temps de calcul.
Le seul cas ou tu peux battre l'optimiseur et le planificateur c'est si tu sais quelquechose sur la requete et sur les donnees dans la base que le DBMS ne peut pas savoir. Souvent, des histoires de statistiques sur la requete que le DBMS ne garde pas en memoire parceque la requete n'est pas assez commune. Et dans ces cas la, tu veux probablement construire la requete de facon tres precise et desactiver l'optimiseur pour cette requete en particulier.