Собственно вечный цикл может быть в самих данных и соответственно надо бы ограничивать либо рекурсивный cte (в мс sql - это maxrecursion) либо разворачивать рекурсию в цикл и там аналогично контролировать "бесконечное зацикливание" тем или иным способом (ограничение глубины, разрыв при отсылке parent в уровень ниже.