Você pode aproveitar a pseudotabela "excluída" neste exemplo. 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, você pode fazer uma 'saída excluída'. na segunda exclusão também, se você precisasse de algo para se juntar à terceira mesa.
Como uma observação lateral, você também pode inserir.* em uma instrução insert e inserir.* e delete.* em uma instrução de atualização.
EDITAR: Além disso, você considerou adicionar um gatilho na tabela1 para excluir da tabela2 + 3? Você estará dentro de uma transação implícita e também terá o "inserido." e "excluído. " pseudo-tabelas disponíveis.