EXISTS
bruges til at returnere en boolesk værdi, JOIN
returnerer en helt anden tabel
EXISTS
bruges kun til at teste, om en underforespørgsel returnerer resultater og kortslutter, så snart den gør. JOIN
bruges til at udvide et resultatsæt ved at kombinere det med yderligere felter fra en anden tabel, som der er en relation til.
I dit eksempel er forespørgslerne semantisk ækvivalente.
Generelt skal du bruge EXISTS
når:
- Du behøver ikke returnere data fra den relaterede tabel
- Du har duper i den relaterede tabel (
JOIN
kan forårsage duplikerede rækker, hvis værdier gentages) - Du vil kontrollere eksistensen (brug i stedet for
LEFT OUTER JOIN...NULL
tilstand)
Hvis du har korrekte indekser, er EXISTS
for det meste vil fungere identisk med JOIN
. Undtagelsen er på meget komplicerede underforespørgsler, hvor det normalt er hurtigere at bruge EXISTS
.
Hvis din JOIN
nøglen ikke er indekseret, kan det være hurtigere at bruge EXISTS
men du bliver nødt til at teste for din specifikke omstændighed.
JOIN
syntaks er lettere at læse og klarere normalt også.