Ogólnie rzecz biorąc, INNER JOIN
i EXISTS
to różne rzeczy.
Pierwsza zwraca duplikaty i kolumny z obu tabel, druga zwraca jeden rekord i jako predykat zwraca rekordy tylko z jednej tabeli.
Jeśli wykonasz sprzężenie wewnętrzne na UNIQUE
kolumny, wykazują taką samą wydajność.
Jeśli wykonasz sprzężenie wewnętrzne na zestawie rekordów z DISTINCT
zastosowane (aby pozbyć się duplikatów), EXISTS
jest zwykle szybszy.
IN
i EXISTS
klauzule (z korelacją equijoin) zwykle używają jednego z kilku SEMI JOIN
algorytmy, które są zwykle bardziej wydajne niż DISTINCT
na jednym ze stołów.
Zobacz ten artykuł na moim blogu:
- IN vs. JOIN vs. EXISTS