Usuwanie SQL czyści tabelę zamiast błędów

Mam fragment SQL, który (można by pomyśleć) nie skompilował, ale zamiast tego usuwa wszystkie wiersze z tabeli docelowej.

Rozważ to ustawienie:

create table TableA (ColumnA varchar(200));
create table TableB (ColumnB varchar(200));

insert TableA values ('A'),('B'),('C');
insert TableB values ('A');

Następnie następujący 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;

Powyższe polecenie delete powoduje usunięcie wszystkich wierszyTableAzamiast tego popełniać błędyColumnA nie istnieje wTableB

Demontruje to tutaj SQL Fiddle:http://www.sqlfiddle.com/#!3/9d883/6

Wydaje się, żeColumnA zTableA jest odbierany, ale spodziewał się, że będzie „poza zakresem”.

Dlaczego to?

questionAnswers(2)

yourAnswerToTheQuestion