Я думаю, что это то, что вы хотите:
delete from t
where t.name1 <> t.name2 and
exists (select 1
from t t2
where t2.id = t.id and
t2.name1 = t2.name2
);
Если вы просто хотите select
, это можно сделать аналогично:
select t.*
from t
where t.name1 = t.name2 or
not exists (select 1
from t t2
where t2.id = t.id and
t2.name1 = t2.name2
);