Aby znaleźć wszystkich użytkowników z co najmniej jednym postem z oceną powyżej 10, użyj:
SELECT u.*
FROM USERS u
WHERE EXISTS(SELECT NULL
FROM POSTS p
WHERE p.user_id = u.id
AND p.rating > 10)
EXISTS nie dba o zawarte w nim polecenie SELECT - możesz zastąpić NULL 1/0, co powinno skutkować błędem matematycznym przy dzieleniu przez zero... Ale tak się nie stanie, ponieważ EXISTS dotyczy tylko filtrowania w klauzula WHERE.
Korelacja (WHERE p.user_id =u.id) jest powodem, dla którego nazywa się to skorelowanym podzapytaniem i zwróci tylko wiersze z tabeli USERS, w których wartości identyfikatora są zgodne, oprócz porównania ocen.
EXISTS jest również szybsze, w zależności od sytuacji, ponieważ zwraca prawdę, gdy tylko kryteria zostaną spełnione - duplikaty nie mają znaczenia.