Guys - thank you. The execution plan was fairly non-committal, probably because there's no actual data in the Agent table anymore (someone helpfully dropped and recreated it), but it did look as if the EXISTS would have a detrimental effect. Alternating between SELECT * and SELECT 1 didn't seem to make any difference at all.

I've elected to go with the CTE, and swap the DISTINCT for a GROUP BY as suggested by TG.

Thanks for your help, everyone - much appreciated.