Я использовал общее табличное выражение и выполняю соединение с самим собой на основе colA и colB. Затем используйте объединение для удаления дубликатов.
with tmp as
( select a.id id_a, a.colA colA_a, a.colB colB_a, b.id id_b, b.colA colA_b, b.colB colB_b
from tbl a
join tbl b
on a.colA=b.colB
)
select id_b id,colA_b colA,colB_b colB
from tmp
union
select id_a,colA_a,colB_a
from tmp;