EXISTS се използва за връщане на булева стойност, JOIN връща цяла друга таблица
EXISTS се използва само за тестване дали подзаявка връща резултати и къси съединения веднага щом го направи. JOIN се използва за разширяване на набор от резултати чрез комбинирането му с допълнителни полета от друга таблица, към която има връзка.
Във вашия пример заявките са семантично еквивалентни.
Като цяло използвайте EXISTS когато:
- Не е необходимо да връщате данни от свързаната таблица
- Имате фалшификати в свързаната таблица (
JOINможе да доведе до дублиране на редове, ако стойностите се повтарят) - Искате да проверите съществуването (използвайте вместо
LEFT OUTER JOIN...NULLсъстояние)
Ако имате правилни индекси, през повечето време EXISTS ще се изпълнява идентично с JOIN . Изключението е при много сложни подзаявки, където обикновено е по-бързо да се използва EXISTS .
Ако вашият JOIN ключът не е индексиран, може да е по-бързо да използвате EXISTS но ще трябва да тествате за вашето конкретно обстоятелство.
JOIN синтаксисът е по-лесен за четене и по-ясен нормално.