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