The work is all doing the hash join. All the other costs are bogus.
The actual number of rows coming out of that is 0
but it estimates more.
The costs shown in the rest of the plan are based on the (incorrect) estimates.
You might find this performs better.
WITH T AS
(
SELECT *,
ROW_NUMBER() OVER (PARTITION BY Id
ORDER BY Revision DESC) AS RN
FROM Entity
)
DELETE FROM T
WHERE RN > 1
AND Revision <= 12586705