Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

EXISTS vs JOIN e uso della clausola EXISTS

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 (JOIN può causare righe duplicate se i valori vengono ripetuti)
  • Vuoi verificare l'esistenza (usare invece di LEFT OUTER JOIN...NULL condizione)

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.