Dit gedrag is correct volgens ANSI-normen.
Als de niet-gekwalificeerde kolomnaam niet in het binnenste bereik wordt opgelost, wordt het buitenste bereik in overweging genomen. Je doet dus effectief een onbedoelde gecorreleerde subquery.
Zolang de tabel profile
bevat dan ten minste één rij
FROM users
WHERE user_id IN (
SELECT user_id FROM profile
)
komt uiteindelijk overeen met alle rijen in users
(behalve waar users.user_id IS NULL
als WHERE NULL IN (NULL)
evalueert niet naar waar). Om dit mogelijke probleem te voorkomen, kunt u twee namen van onderdelen gebruiken.
DELETE FROM users
WHERE user_id IN (SELECT p.user_id
FROM profile p)
Zou de fout geven