EXISTS viene utilizzato per restituire un valore booleano, JOIN restituisce un'intera altra tabella
EXISTS viene utilizzato solo per verificare se una sottoquery restituisce risultati e va in cortocircuito non appena lo fa. JOIN viene utilizzato per estendere un set di risultati combinandolo con campi aggiuntivi di un'altra tabella a cui esiste una relazione.
Nel tuo esempio, le query sono semanticamente equivalenti.
In generale, usa EXISTS quando:
- Non è necessario restituire i dati dalla tabella correlata
- Hai duplicati nella tabella correlata (
JOINpuò causare righe duplicate se i valori vengono ripetuti) - Vuoi verificare l'esistenza (usare invece di
LEFT OUTER JOIN...NULLcondizione)
Se disponi di indici appropriati, il più delle volte EXISTS funzionerà in modo identico a JOIN . L'eccezione riguarda le sottoquery molto complicate, dove normalmente è più veloce usare EXISTS .
Se il tuo JOIN chiave non è indicizzata, potrebbe essere più veloce usare EXISTS ma dovrai fare un test per la tua circostanza specifica.
JOIN la sintassi è più facile da leggere e anche più chiara normalmente.