Det finns inget oväntat med det resultatet, utom kanske om du inte förstår det.
Varje CTE löses each and every time
det hänvisas till. Ja, det är därför det är möjligt för en enkel CTE på en mycket transaktionstabell att returnera 4 rader i en referens och 5 rader i de nästa 2 nivåerna nedåt.
På ditt prov är det dock på grund av ORDER BY NEWID(), vilket ger varje upplösning av den ursprungliga CTE en annan row_number()-ing. Trodde du att CTE:er lagras i minnet och cachelagras? På SQLFiddle-webbplatsen, under dina resultat, finns länken "visa exekveringsplan". Den visar 2 distinkta, separata skanningar av tabellen .