Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

SQL Delete limpa a tabela em vez de dar erro


Isso funciona como esperado, devido à correlação entre ColumnA na consulta interna para a externa.

Esse padrão de consulta correlacionado comumente usado é válido
DELETE TableA WHERE NOT EXISTS (select * from TableB where TableB.ID=TableA.ID)

Ele remove as entradas da Tabela A que não possuem um registro dependente na TabelaB.

Ele mostra que você pode fazer referência às colunas da TabelaA em uma consulta correlacionada. Na sua consulta
delete TableA where ColumnA in (select ColumnA from TableB)

A consulta interna está produzindo
  • uma linha para cada registro na TabelaB
  • uma coluna para cada linha, cujo valor é ColunaA da consulta externa

Então o DELETE passa