Detta beteende är korrekt enligt ANSI-standarder.
Om det okvalificerade kolumnnamnet inte löser sig i det inre omfånget kommer det yttre omfattningen att beaktas. Så effektivt gör du en oavsiktlig korrelerad underfråga.
Så länge tabellen profile
innehåller minst en rad då
FROM users
WHERE user_id IN (
SELECT user_id FROM profile
)
kommer att matcha alla rader i users
(förutom alla där users.user_id IS NULL
som WHERE NULL IN (NULL)
bedöms inte vara sant). För att undvika detta möjliga problem kan du använda två delnamn.
DELETE FROM users
WHERE user_id IN (SELECT p.user_id
FROM profile p)
Skulle ge felet