Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

T-SQL Elimina tutte le righe da una tabella quando la sottoquery non è corretta

Come TableAID non esiste in TableA , la query utilizza la colonna di TableB . Pertanto la query è la stessa di:

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

Quindi in sostanza sta facendo:

delete from TableB
where id in (TableAID)

Se si utilizzano sottoquery, è meglio menzionare i nomi delle tabelle quando si fa riferimento. Il seguente SARA' lancia un'eccezione:

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

Inoltre userei un alias in modo da sapere a quale query ci riferiamo:

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