Quedaria mejor con LEFT JOIN ya que si el ID master no tiene registros en la tabla detail, entonces no borra nada en ninguna tabla.
Entonces:
Código:
delete master.*, detail.*
from master
LEFT join detail on detail.master_id = master.id
where master.id = 2
Y en el caso de continuar borrando tablas nietas y bisnietas solamente agregamos otro JOIN:
Código:
delete master.*, detail.*, nietas.*
from master
LEFT join detail on detail.master_id = master.id
LEFT join nietas on nietas.detail_id = detail.id
where master.id = 2