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 (
JOINkan forårsage duplikerede rækker, hvis værdier gentages) - Du vil kontrollere eksistensen (brug i stedet for
LEFT OUTER JOIN...NULLtilstand)
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å.