Я за cross apply, меньше кода.
Чего сложного тут увидели не понятно.
Разбор как это работает:
Слева таблица а, справа таблица b.
Для любого значения слева берется top 3 значения справа отсортированных по наибольшее зп и у которого такой же Id department, таким образом получаем перемножение 1 строки слева на 3 строки справа = 3 новые строки. Проблема в том, что слева может быть не уникальное значение, тогда выбираем уникальные и точно также cross apply на правые значения делаем, или distinct на конечном запросе.