Tyto dva dotazy jsou stejné, až na to, že druhý je syntaxe ANSI-92 SQL a první je starší syntaxe SQL, která nezahrnuje klauzuli spojení. Měly by vytvořit přesně stejný plán interních dotazů, i když možná budete chtít zkontrolovat.
Syntaxi ANSI-92 byste měli použít z několika důvodů
- Použití klauzule JOIN odděluje logiku vztahu od logiky filtru (WHERE), a je tedy čistší a snáze pochopitelné.
- Na tomto konkrétním dotazu nezáleží, ale existuje několik okolností, kdy je starší syntaxe vnějšího spojení (pomocí + ) nejednoznačná a výsledky dotazu jsou tedy závislé na implementaci – nebo dotaz nelze vyřešit vůbec. Ty se u ANSI-92 nevyskytují
- Je to dobrá praxe, protože většina vývojářů a dba bude v dnešní době používat ANSI-92 a měli byste se řídit standardem. Všechny moderní dotazovací nástroje jistě vygenerují ANSI-92.
- Jak zdůraznil @gbn, má tendenci se vyhýbat náhodným křížovým spojením.
Sám jsem ANSI-92 nějakou dobu odolával, protože stará syntaxe má mírnou koncepční výhodu, protože je snazší představit si SQL jako hromadné kartézské spojení všech použitých tabulek, po kterém následuje operace filtrování – mentální technika, která může být užitečná. pro pochopení toho, co dělá SQL dotaz. Před několika lety jsem se však rozhodl, že musím jít s dobou a po relativně krátké době přizpůsobení tomu nyní silně dávám přednost - především z prvního důvodu uvedeného výše. Jediné místo, kde byste se měli odchýlit od syntaxe ANSI-92, nebo raději tuto možnost nepoužívat, jsou přirozené spoje, které jsou implicitně nebezpečné.