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

SQL Delete borra la tabla en lugar de errores

Eso funciona como se esperaba, debido a la correlación entre la ColumnA en la consulta interna y la externa.

Este patrón de consulta correlacionada de uso común es válido

DELETE TableA WHERE NOT EXISTS (select * from TableB where TableB.ID=TableA.ID)

Elimina las entradas de TableA que no tienen un registro dependiente en TableB.

Muestra que puede hacer referencia a las columnas de TableA en una consulta correlacionada. En su consulta

delete TableA where ColumnA in (select ColumnA from TableB)

La consulta interna está produciendo

  • una fila para cada registro en TableB
  • una columna para cada fila, cuyo valor es ColumnA de la consulta externa

Entonces el DELETE pasa