Il n'y a rien d'inattendu dans ce résultat, sauf peut-être si vous ne le comprenez pas.
Chaque CTE est résolu each and every time
il est référencé. Oui, c'est pourquoi il est possible pour un simple CTE sur une table hautement transactionnelle de renvoyer 4 lignes dans une référence et 5 lignes dans les 2 niveaux suivants.
Sur votre échantillon cependant, c'est à cause de ORDER BY NEWID(), donnant à chaque résolution du CTE d'origine un row_number() différent. Pensiez-vous que les CTE sont stockés en mémoire et mis en cache ? Sur le site SQLFiddle, sous vos résultats, il y a un lien "voir le plan d'exécution". Il affiche 2 analyses distinctes et séparées du tableau .