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 wierszyTableA
zamiast 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?