EXISTS
används för att returnera ett booleskt värde, JOIN
returnerar en helt annan tabell
EXISTS
används bara för att testa om en underfråga ger resultat och kortsluter så fort den gör det. JOIN
används för att utöka en resultatuppsättning genom att kombinera den med ytterligare fält från en annan tabell som det finns en relation till.
I ditt exempel är frågorna semantiskt likvärdiga.
I allmänhet använder du EXISTS
när:
- Du behöver inte returnera data från den relaterade tabellen
- Du har duper i den relaterade tabellen (
JOIN
kan orsaka dubbletter av rader om värden upprepas) - Du vill kontrollera existensen (använd istället för
LEFT OUTER JOIN...NULL
skick)
Om du har korrekta index, för det mesta EXISTS
kommer att fungera identiskt med JOIN
. Undantaget är på mycket komplicerade underfrågor, där det normalt går snabbare att använda EXISTS
.
Om din JOIN
nyckeln inte är indexerad, det kan vara snabbare att använda EXISTS
men du måste testa för din specifika omständighet.
JOIN
syntax är lättare att läsa och tydligare normalt också.