Это потому, что у вас есть 4 ситуации.
sal null, dept null
sal null, dept nonnull
sal nonnull, dept null
sal nonnull, dept nonnul
И у вас есть только два набора столбцов длясравните.
Каким-то образом вы получите дубликаты.
В качестве гибрида вы можете попробовать:
select distinct t1.id, t1.name, t1.dept_name, t1.mgr_id, t2.mgr_id, t1.sal, t2.sal from employee t1
inner join employee t2 on t2.id = t1.id and t2.name = t1.name
where t1.id in
(select id from
(select id, name, dept_name, count(*) from employee
group by id, name, dept_name
having count(*) > 1))
and (nvl(t1.mgr_id,0) <> nvl(t2.mgr_id,0)
or nvl(t1.sal,0) <> nvl(t2.sal,0)) ;
(обратите внимание на отличное)
или, вы можете использовать:
select distinct t1.id, t1.name, t1.dept_name, t1.mgr_id
from employee t1
order by 1, 2, 3, 4
, и вы увидите разницу между строками.