Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

WHERE IN (SELECT NonExistingColumnName) causa um comportamento inesperado


Este é um problema conhecido.

A seguinte declaração erroneamente delete TODOS as linhas da tabela de usuários:
DELETE FROM users WHERE user_id IN (SELECT user_id FROM groups);

mesmo que a tabela de grupos não tenha uma coluna chamada user_id.

A instrução a seguir, no entanto, lançará um erro:
DELETE FROM users WHERE user_id IN (SELECT g.user_id FROM groups g);

Msg 207, Level 16, State 1, Line 1
Invalid column name user_id

EDITAR
DELETE TOP(1) FROM #Orders WHERE OrderID IN (SELECT OtherID FROM #LIST_TO_DELETE  )
 Invalid column name 'OtherID'

Isso gera um erro, porque OtherID não existe em #Orders