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

T-SQL Exclui todas as linhas de uma tabela quando a subconsulta é malformada


Como TableAID não existe em TableA , a consulta está usando a coluna de TableB . Portanto, a consulta é a mesma que:
delete from TableB
where id in (
  select TableB.TableAID
  from TableA
  where GUID = 'fdjkhflafdhf'
)

Então, em essência, está fazendo:
delete from TableB
where id in (TableAID)

Se você estiver usando subconsultas, é melhor mencionar os nomes das tabelas ao fazer referência. O seguinte VOCÊ lançar uma exceção:
 delete from TableB
    where id in (
      select TableA.TableAID
      from TableA
      where TableA.GUID = 'fdjkhflafdhf'
    )

Além disso, eu usaria um alias para sabermos a qual consulta estamos nos referindo:
 delete from TableB
    where id in (
      select a.TableAID
      from TableA a
      where a.GUID = 'fdjkhflafdhf'
    )