DELETE文の述部には、削除ターゲット テーブルや他のテーブルを参照したsubqueryを組み込むことができます。次のDELETE文は、その例です。
DELETE FROM publisher WHERE 0 = (SELECT COUNT(*) FROM book WHERE book.pub_num=publisher.pub_num);
図書館に本がある出版社が2社、ない出版社が2社あります。
このサブクエリーは、外部参照であるpublisherテーブルの各行ごとに1回ずつ実行されます。図書館に本がない出版社が2社あるため、その2社の2つの行がpublisherテーブルから削除されます。
このDELETEを変更して、非相関サブクエリーを使用するには、サブクエリーのコードを修正して、参照するテーブルをすべてサブクエリーのFROM句に入れます。
DELETE FROM publisher WHERE 0 = (SELECT COUNT(*) FROM book, publisher WHERE book.pub_num=publisher.pub_num);
このように記述すると、subqueryの述部にローカルの定義参照が入るため、DELETE文には相関subqueryは入らなくなります。カウントは1回で確定され、値がゼロにはならないため、行は削除されません。