Er is niets onverwachts aan dat resultaat, behalve misschien als je het niet begrijpt.
Elke CTE wordt each and every time
er wordt naar verwezen. Ja, daarom is het mogelijk voor een eenvoudige CTE op een zeer transactionele tabel om 4 rijen in één referentie en 5 rijen in de volgende 2 niveaus lager te retourneren.
Op uw voorbeeld is dit echter vanwege de ORDER BY NEWID(), waardoor elke resolutie van de originele CTE een ander rijnummer () -ing krijgt. Dacht je dat CTE's in het geheugen worden opgeslagen en in de cache worden opgeslagen? Op de SQLFiddle-site, onder uw resultaten, staat een link "uitvoeringsplan bekijken". Het toont 2 verschillende, afzonderlijke scans van de tafel .