Няма нищо неочаквано в този резултат, освен може би ако не го разбирате.
Всеки CTE се разрешава each and every time
той е рефериран. Да, ето защо е възможно прост CTE на високо транзакционна таблица да върне 4 реда в една справка и 5 реда в следващите 2 нива надолу.
Във вашата проба обаче това се дължи на ORDER BY NEWID(), даващ на всяка резолюция на оригиналния CTE различен row_number()-ing. Мислехте ли, че CTE се съхраняват в паметта и се кешират? На сайта SQLFiddle под вашите резултати има връзка „преглед на плана за изпълнение“. Показва 2 отделни, отделни сканирания на масата .