Lo que mencionas es lo que se esperaria que pasara, ya que si te fijas, el applyupdates esta dentro del try de manera que si hay una excepcion aparentemente si hace el borrado, que es donde se genera la exepcion, pero como no se ejecuta el applyupdates no pasa nada.
Lo correcto:
Código Delphi
[-]
Try
delete;
ApplyUpdates;
except
CancelUpdates;
end;
De manera que si hay un error se cancela todo.
Ojo, el dataset debe tener activado el CachedUpdates, ya que si no, esto de Apply/Cancel updates no funciona