Sie können es so in eine Unterabfrage packen. Das Problem ist, dass MySQL Zeilen, die es auch abfragt, nicht aktualisieren kann. Dadurch wird MySQL implizit eine temporäre Tabelle verwenden, um die IDs zu speichern, die Sie löschen möchten.
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
)