EXISTS
se používá k vrácení booleovské hodnoty JOIN
vrátí celou jinou tabulku
EXISTS
se používá pouze k testování, zda dílčí dotaz vrací výsledky, a jakmile se tak stane, dojde ke zkratu. JOIN
se používá k rozšíření sady výsledků jejím zkombinováním s dalšími poli z jiné tabulky, ke které existuje vztah.
Ve vašem příkladu jsou dotazy sémanticky ekvivalentní.
Obecně používejte EXISTS
kdy:
- Nemusíte vracet data ze související tabulky
- V související tabulce máte podvody (
JOIN
může způsobit duplicitní řádky, pokud se hodnoty opakují) - Chcete zkontrolovat existenci (použijte místo
LEFT OUTER JOIN...NULL
podmínka)
Pokud máte správné indexy, většinou EXISTS
bude fungovat stejně jako JOIN
. Výjimkou jsou velmi komplikované poddotazy, kde je obvykle rychlejší použít EXISTS
.
Pokud vaše JOIN
klíč není indexován, může být rychlejší použít EXISTS
ale budete muset otestovat své konkrétní okolnosti.
JOIN
syntaxe je také normálně čitelnější a jasnější.