Schuld an diesem Verhalten ist die etwas luschige Art, in der die ADODataset gestrickt sind. Umgehen kannst du das bspw mit dem BetterADODataset, bei dem du die
ADO-Property 'Unique Table' setzen kannst, oder indem du dich in den Event OnBeforeDelete hängst, dort das 'richtige' DELETE-Statement absetzt und den 'eingebauten' Vorgang anschliessend mit SysUtils.Abort abbrichst - oder überhaupt eine Routine schreibst, die du statt ADODatase.Delete aufrufst. Auf Datenbank-Ebene würde ich das nicht unbedingt lösen wollen.