Этот запрос создает transitive closure
списка смежности: список всех пар предок-потомок.
Так как он вернет всех потомков для каждого предка, верно и обратное: для каждого потомка онвернет всех своих предков.
Таким образом, этот запрос возвращает все возможные комбинации, независимо от порядка обхода: не имеет значения, являетесь ли вы связью родителей с детьми или наоборот.
Давайте проверим это:
WITH customers (id_customer, id_parent_customer) AS
(
SELECT *
FROM (
VALUES (1, NULL),
(2, 1),
(3, 2),
(4, 2),
(5, 4),
(6, 4),
(7, NULL),
(8, 7)
) t (a, b)
),
q AS
(
SELECT ID_CUSTOMER, ID_CUSTOMER AS root_customer
FROM CUSTOMERS c
UNION ALL
SELECT c.ID_CUSTOMER, q.root_customer
FROM q
JOIN CUSTOMERS c
ON c.ID_PARENT_CUSTOMER = q.ID_CUSTOMER
)
SELECT *
FROM q
ORDER BY
id_customer, root_customer DESC