sql >> Base de Datos >  >> RDS >> Sqlserver

T-SQL Elimina todas las filas de una tabla cuando la subconsulta tiene un formato incorrecto

Como TableAID no existe en TableA , la consulta está usando la columna de TableB . Por lo tanto, la consulta es la misma que:

delete from TableB
where id in (
  select TableB.TableAID
  from TableA
  where GUID = 'fdjkhflafdhf'
)

Entonces, en esencia, está haciendo:

delete from TableB
where id in (TableAID)

Si está utilizando subconsultas, es mejor mencionar los nombres de sus tablas al hacer referencia. Los siguientes VOLUNTARÁN lanzar una excepción:

 delete from TableB
    where id in (
      select TableA.TableAID
      from TableA
      where TableA.GUID = 'fdjkhflafdhf'
    )

Además, usaría un alias para que sepamos a qué consulta nos referimos:

 delete from TableB
    where id in (
      select a.TableAID
      from TableA a
      where a.GUID = 'fdjkhflafdhf'
    )