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 (
JOIN
może powodować zduplikowane wiersze, jeśli wartości się powtarzają) - Chcesz sprawdzić istnienie (użyj zamiast
LEFT OUTER JOIN...NULL
warunek)
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.