Ваш исходный запрос возвращает дубликаты, так как DISTINCT
применяется только к каждому запросу, а не к общему результату. Если это важно для вас, вы можете использовать ( DEMO )
SELECT v.user_id,
v.name,
v.parent
FROM users
CROSS apply (VALUES (1,mgr_id,mgr_name,NULL),
(2,user_id,name,mgr_id),
(3,mgr_id,mgr_name, R_id) ) v(source, user_id, name, parent)
GROUP BY v.source,
v.user_id,
v.name,
v.parent
В противном случае более простая версия, которая удаляет их,
SELECT DISTINCT v.user_id,
v.name,
v.parent
FROM users
CROSS apply (VALUES (mgr_id,mgr_name,NULL),
(user_id,name,mgr_id),
(mgr_id,mgr_name, R_id) ) v(user_id, name, parent)