Това поведение е правилно според стандартите ANSI.
Ако неквалифицираното име на колона не се разреши във вътрешния обхват, тогава ще се вземе предвид външният обхват. Толкова ефективно, че правите неволно корелирана подзаявка.
Докато таблицата profile
съдържа поне един ред, тогава
FROM users
WHERE user_id IN (
SELECT user_id FROM profile
)
в крайна сметка ще съпостави всички редове в users
(освен където users.user_id IS NULL
като WHERE NULL IN (NULL)
не се оценява като вярно). За да избегнете този възможен проблем, можете да използвате две имена на части.
DELETE FROM users
WHERE user_id IN (SELECT p.user_id
FROM profile p)
Ще даде грешка