Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

WHERE IN (SELECT NonExistingColumnName) provoca un comportamento imprevisto

Questo è un problema noto.

La seguente istruzione verrà erroneamente delete TUTTI le righe della tabella users:

DELETE FROM users WHERE user_id IN (SELECT user_id FROM groups);

anche se la tabella dei gruppi non ha una colonna denominata user_id.

La seguente istruzione, tuttavia, genererà un errore:

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

MODIFICA

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

Questo genera un errore, perché OtherID non esiste in #Orders