Връзката на Джо е добра отправна точка. Quassnoi покрива и това.
Като цяло, ако полетата ви са правилно индексирани, ИЛИ ако очаквате да филтрирате повече записи (т.е. да имат много редове EXIST
в подзаявката) NOT EXISTS
ще се представи по-добре.
EXIST
и NOT EXISTS
и двете са на късо съединение – веднага щом запис отговаря на критериите, той или се включва, или се филтрира и оптимизаторът преминава към следващия запис.
LEFT JOIN
ще се присъедини към ВСИЧКИ ЗАПИСИ независимо дали съвпадат или не, след това филтрирайте всички несъответстващи записи. Ако вашите таблици са големи и/или имате няколко JOIN
критерии, това може да бъде много много ресурсоемко.
Обикновено се опитвам да използвам NOT EXISTS
и EXIST
където е възможно. За SQL Server, IN
и NOT IN
са семантично еквивалентни и може да са по-лесни за писане. Това са сред единствените оператори, които ще намерите в SQL Server, за които гарантирано късо съединение.