Te dwa zapytania są takie same, z wyjątkiem tego, że drugie to składnia SQL ANSI-92, a pierwsze to starsza składnia SQL, która nie zawiera klauzuli join. Powinny generować dokładnie taki sam wewnętrzny plan zapytań, chociaż możesz to sprawdzić.
Powinieneś używać składni ANSI-92 z kilku powodów
- Użycie klauzuli JOIN oddziela logikę relacji od logiki filtra (GDZIE) i dzięki temu jest czystsze i łatwiejsze do zrozumienia.
- Nie ma to znaczenia w przypadku tego konkretnego zapytania, ale jest kilka sytuacji, w których starsza składnia sprzężenia zewnętrznego (przy użyciu + ) jest niejednoznaczna, a wyniki zapytania są w związku z tym zależne od implementacji - lub zapytanie nie może być w ogóle rozwiązane. Nie występują z ANSI-92
- To dobra praktyka, ponieważ większość programistów i dba używa obecnie ANSI-92 i powinieneś przestrzegać tego standardu. Z pewnością wszystkie nowoczesne narzędzia do zapytań wygenerują ANSI-92.
- Jak wskazuje @gbn, pozwala to uniknąć przypadkowych połączeń krzyżowych.
Ja sam przez jakiś czas opierałem się ANSI-92, ponieważ starą składnię ma niewielką przewagę koncepcyjną, ponieważ łatwiej jest wyobrazić sobie SQL jako masowe złączenie kartezjańskie wszystkich używanych tabel, po którym następuje operacja filtrowania - technika mentalna, która może być przydatna do zrozumienia, co robi zapytanie SQL. Jednak kilka lat temu zdecydowałem, że muszę iść z duchem czasu i po stosunkowo krótkim okresie dostosowawczym teraz zdecydowanie wolę to - głównie z pierwszego powodu podanego powyżej. Jedynym miejscem, w którym należy odejść od składni ANSI-92, a raczej nie używać tej opcji, są naturalne złączenia, które są domyślnie niebezpieczne.