Risolvo il problema con i suggerimenti dell'ottimizzatore, specificando l'esatto ordine di join nel comando DELETE:
delete a, b
from b
STRAIGHT_JOIN a on a.id = b.a_id
where a.id = ?;
MySQL cancellerà prima b righe grazie al suggerimento per l'ottimizzatore STRAIGHT_JOIN.