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