EXISTS służy do zwracania wartości logicznej, JOIN zwraca całą inną tabelę
EXISTS służy tylko do sprawdzania, czy podzapytanie zwraca wyniki i powoduje zwarcia, gdy tylko to zrobi. JOIN służy do rozszerzenia zestawu wyników poprzez połączenie go z dodatkowymi polami z innej tabeli, do której istnieje relacja.
W twoim przykładzie zapytania są semantycznie równoważne.
Ogólnie użyj EXISTS kiedy:
- Nie musisz zwracać danych z powiązanej tabeli
- Masz duplikaty w powiązanej tabeli (
JOINmoże powodować zduplikowane wiersze, jeśli wartości się powtarzają) - Chcesz sprawdzić istnienie (użyj zamiast
LEFT OUTER JOIN...NULLwarunek)
Jeśli masz odpowiednie indeksy, w większości przypadków EXISTS będzie działać identycznie jak JOIN . Wyjątkiem są bardzo skomplikowane podzapytania, w których zwykle szybciej jest użyć EXISTS .
Jeśli Twój JOIN klucz nie jest indeksowany, może być szybciej użyć EXISTS ale musisz przeprowadzić test pod kątem konkretnych okoliczności.
JOIN składnia jest łatwiejsza do odczytania i bardziej przejrzysta.