i wonder if you have taken any time to try to figure out why?
no? okay, i will help you
run the subquery by itself, and see if it returns any rows
yes, it returns rows
so the NOT EXISTS condition will be false, and therefore the outer query will return no rows
you need to rewrite the subquery in accordance with your specification from post #1 -- "which have no old name"
the NOT EXISTS has to check for an old name that matches the row it's being evaluated for
thus, it has to be a correlated subquery (if you don't know what that means, please do some googling)