Este comportamiento es correcto según los estándares ANSI.
Si el nombre de columna no calificado no se resuelve en el ámbito interno, se considerará el ámbito externo. Entonces, efectivamente, está haciendo una subconsulta correlacionada no intencional.
Siempre que la tabla profile
contiene al menos una fila entonces
FROM users
WHERE user_id IN (
SELECT user_id FROM profile
)
terminará haciendo coincidir todas las filas en users
(excepto donde users.user_id IS NULL
como WHERE NULL IN (NULL)
no se evalúa como verdadero). Para evitar este posible problema, puede usar nombres de dos partes.
DELETE FROM users
WHERE user_id IN (SELECT p.user_id
FROM profile p)
Daría el error