try SQL Dense_Rank() window function instead:
with a1 as (
select d.name as department, e.name as employee, e.salary as salary,
dense_rank() over (partition by d.name order by e.salary desc) as dense_ranked
from employee e join department d on e.departmentId=d.id
)
select department, employee, salary
from a1
where dense_ranked <= 3;