Das funktioniert wie erwartet, aufgrund der Korrelation zwischen ColumnA in der inneren Abfrage zur äußeren.
Dieses häufig verwendete korrelierte Abfragemuster ist gültig
DELETE TableA WHERE NOT EXISTS (select * from TableB where TableB.ID=TableA.ID)
Es entfernt TableA-Einträge, die keinen abhängigen Datensatz in TableB haben.
Es zeigt, dass Sie in einer korrelierten Abfrage auf TableA-Spalten verweisen können. In Ihrer Abfrage
delete TableA where ColumnA in (select ColumnA from TableB)
Die innere Abfrage produziert
- eine Zeile für jeden Datensatz in TableB
- eine Spalte für jede Zeile, deren Wert ColumnA aus der äußeren Abfrage ist
Das LÖSCHEN geht also durch