この動作はANSI規格に従って正しいです。
修飾されていない列名が内部スコープで解決されない場合は、外部スコープが考慮されます。つまり、効果的に、意図しない相関サブクエリを実行していることになります。
テーブルのprofile
である限り 少なくとも1つの行が含まれている場合
FROM users
WHERE user_id IN (
SELECT user_id FROM profile
)
最終的にusers
のすべての行に一致します (users.user_id IS NULL
WHERE NULL IN (NULL)
として trueと評価されません)。この考えられる問題を回避するには、2つのパーツ名を使用できます。
DELETE FROM users
WHERE user_id IN (SELECT p.user_id
FROM profile p)
エラーが発生します