SQL Delete limpa a tabela em vez de errar
Eu tenho um pedaço de SQL que (você acha) não compilaria, mas que, em vez disso, exclui todas as linhas da tabela de destino.
Considere esta configuração:
create table TableA (ColumnA varchar(200));
create table TableB (ColumnB varchar(200));
insert TableA values ('A'),('B'),('C');
insert TableB values ('A');
Então o seguinte sql:
--Returns all rows from TableA
select * from TableA;
--Does not error (ColumnA does not exist on TableB)
delete TableA where ColumnA in (select ColumnA from TableB)
--No Rows are returned
select * from TableA;
A instrução de exclusão acima faz com que todas as linhas sejam removidasTableA
, em vez de errarColumnA
não existe emTableB
Há um violino SQL demontrating isso aqui:http://www.sqlfiddle.com/#!3/9d883/6
Parece que oColumnA
deTableA
está sendo pego, mas esperava que fosse "fora do escopo".
Por que é isso?