Puede aprovechar la pseudo tabla "eliminada" en este ejemplo. Algo como:
begin transaction;
declare @deletedIds table ( id int );
delete from t1
output deleted.id into @deletedIds
from table1 as t1
inner join table2 as t2
on t2.id = t1.id
inner join table3 as t3
on t3.id = t2.id;
delete from t2
from table2 as t2
inner join @deletedIds as d
on d.id = t2.id;
delete from t3
from table3 as t3 ...
commit transaction;
Obviamente puedes hacer una 'salida eliminada'. en la segunda eliminación también, si necesita algo para unirse a la tercera mesa.
Como nota al margen, también puede insertar.* en una declaración de inserción, y tanto insertar.* como eliminar.* en una declaración de actualización.
EDITAR: Además, ¿ha considerado agregar un disparador en la tabla 1 para eliminar de la tabla 2 + 3? Estará dentro de una transacción implícita y también tendrá "inserted." y "deleted. " pseudo-tablas disponibles.