Przeglądałem różne tuturiale na temat SQL'owego EXISTS i zazwyczaj natrafiam na taką definicję:
The EXISTS operator is a logical operator that allows you to check whether a subquery returns any row. The EXISTS operator returns TRUE if the subquery returns one or more rows.
Przyznam szczerze taka definicja nie za bardzo mi pasuje, wyjaśnię dlaczego. Przykładowe zapytanie.
SELECT * FROM sales.orders o WHERE EXISTS ( SELECT customer_id FROM sales.customers c WHERE o.customer_id = c.customer_id AND city = 'San Jose' )
No to zgodnie z powyższą definicją to zapytanie w zależności od tego co zwróci podzapytanie powinno przyjąć jedno z dwóch możliwych postaci skoro EXISTS zwraca true albo false - mianowicie :
SELECT * FROM sales.orders o WHERE true
albo
SELECT * FROM sales.orders o WHERE false
Czyli albo zwracałby wszystkie wiersze z tabeli albo żadnego. Oczywiście coś takiego jest mało przydatne i w praktyce widzimy, że to wcale tak nie działa. Jak zatem popranie zdefiniować działanie EXISTS ? Czy nie lepszą definicją byłoby : wykonaj działanie (np. SELECT) operując tylko i wyłącznie na wierszach zwróconych przez podzapytanie zawarte w EXISTS ?