In generale, INNER JOIN
e EXISTS
sono cose diverse.
Il primo restituisce duplicati e colonne da entrambe le tabelle, il secondo restituisce un record e, essendo un predicato, restituisce record da una sola tabella.
Se esegui un inner join su un UNIQUE
colonna, mostrano le stesse prestazioni.
Se esegui un inner join su un recordset con DISTINCT
applicato (per eliminare i duplicati), EXISTS
di solito è più veloce.
IN
e EXISTS
le clausole (con una correlazione equijoin) di solito utilizzano uno dei numerosi SEMI JOIN
algoritmi che di solito sono più efficienti di un DISTINCT
su uno dei tavoli.
Vedi questo articolo nel mio blog:
- IN vs. JOIN vs. EXISTS