EXISTS
wird verwendet, um einen booleschen Wert zurückzugeben, JOIN
gibt eine ganz andere Tabelle zurück
EXISTS
wird nur verwendet, um zu testen, ob eine Unterabfrage Ergebnisse zurückgibt, und schließt Kurzschlüsse, sobald dies der Fall ist. JOIN
wird verwendet, um eine Ergebnismenge zu erweitern, indem sie mit zusätzlichen Feldern aus einer anderen Tabelle kombiniert wird, zu der eine Beziehung besteht.
In Ihrem Beispiel sind die Abfragen semantisch äquivalent.
Verwenden Sie im Allgemeinen EXISTS
Wann:
- Sie müssen keine Daten aus der zugehörigen Tabelle zurückgeben
- Du hast Duplikate in der zugehörigen Tabelle (
JOIN
kann zu doppelten Zeilen führen, wenn sich Werte wiederholen) - Sie wollen die Existenz prüfen (verwenden Sie statt
LEFT OUTER JOIN...NULL
Zustand)
Wenn Sie über geeignete Indizes verfügen, ist der EXISTS
meistens verhält sich genauso wie JOIN
. Die Ausnahme bilden sehr komplizierte Unterabfragen, bei denen es normalerweise schneller ist, EXISTS
zu verwenden .
Wenn Ihr JOIN
Schlüssel nicht indiziert ist, kann es schneller sein, EXISTS
zu verwenden aber Sie müssen für Ihre spezifischen Umstände testen.
JOIN
Syntax ist normalerweise auch leichter zu lesen und klarer.