Egal, die (Grid)Aussage ist nutzlos. Das ist nur der Visualisierungsteil.
Es geht immer um die Datenmenge, die unter dem Grid liegt:
DBGRID< Dataset <
Query Statement
Wie gesagt, ich hab keine Ahnung, wie genial
MSSQL Server bei der Auflösung solcher Statements bzw. der Bestimmung der Schlüsselinformationen arbeitet, aber egal ob insert, delete oder update, er hat immer das gleiche Problem. (Also könnte er sich auch in jedem Fall gleich Verhalten)
Wenn also ein Insert auf einem Dataset funktioniert, das Delete auf dem gleichen Dataset aber fehlschlägt, ist entweder die Servermechanik etwas schusselig oder Du machst einen Unterschied im Code, der aus Deinen bisherigen Äußerungen nicht hervorgeht (und Dir vielleicht auch nicht mal bewusst ist)