Je résous le problème avec les astuces de l'optimiseur, en spécifiant l'ordre de jointure exact dans la commande DELETE :
delete a, b
from b
STRAIGHT_JOIN a on a.id = b.a_id
where a.id = ?;
MySQL supprimera d'abord b lignes grâce à l'astuce d'optimisation STRAIGHT_JOIN.