Vous pouvez l'envelopper dans une sous-requête comme ça. Le problème est que MySQL ne peut pas mettre à jour les lignes qu'il interroge également. Cela obligera MySQL à utiliser implicitement une table temporaire pour stocker les identifiants que vous souhaitez supprimer.
DELETE FROM tasks
WHERE tasks.id IN
(
SELECT id FROM
(
SELECT tasks.id
FROM tasks
JOIN deadlines ON deadlines.id = deadline_id
WHERE DATE_ADD(tasks.created_at, INTERVAL deadlines.duration DAY) <= NOW()
) AS taskstodelete
)