Per trovare tutti gli utenti con almeno un post con una valutazione superiore a 10, utilizza:
SELECT u.*
FROM USERS u
WHERE EXISTS(SELECT NULL
FROM POSTS p
WHERE p.user_id = u.id
AND p.rating > 10)
EXISTS non si preoccupa dell'istruzione SELECT al suo interno:potresti sostituire NULL con 1/0, il che dovrebbe comportare un errore matematico per la divisione per zero ... Ma non lo farà, perché EXISTS si occupa solo del filtraggio in la clausola WHERE.
La correlazione (WHERE p.user_id =u.id) è il motivo per cui viene chiamata subquery correlata e restituirà solo righe dalla tabella USERS in cui i valori id corrispondono, oltre al confronto delle valutazioni.
EXISTS è anche più veloce, a seconda della situazione, perché restituisce true non appena i criteri vengono soddisfatti:i duplicati non contano.