SQL Delete borra la tabla en lugar de errores

Tengo un fragmento de SQL que (usted pensaría) no compilaría, pero que en su lugar elimina todas las filas de la tabla de destino.

Considere esta configuración:

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

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

Luego el siguiente 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;

La declaración de eliminación anterior hace que todas las filas se eliminen deTableA, en lugar de confundir esoColumnA no existe enTableB

Hay un Fiddle de SQL demostrando esto aquí:http://www.sqlfiddle.com/#!3/9d883/6

Parece que elColumnA desdeTableA está siendo recogido, pero espera que esté "fuera de alcance".

¿Por qué es esto?

Respuestas a la pregunta(2)

Su respuesta a la pregunta