Tidak ada yang tidak terduga dari hasil itu, kecuali mungkin jika Anda tidak memahaminya.
Setiap CTE diselesaikan each and every time
itu dirujuk. Ya, inilah mengapa CTE sederhana pada tabel yang sangat transaksional dapat mengembalikan 4 baris dalam satu referensi dan 5 baris di 2 level berikutnya ke bawah.
Namun, pada sampel Anda, itu karena ORDER BY NEWID(), memberikan setiap resolusi CTE asli sebuah row_number()-ing yang berbeda. Apakah menurut Anda CTE disimpan dalam memori dan di-cache? Di situs SQLFiddle, di bawah hasil Anda, ada tautan "lihat rencana eksekusi". Ini menunjukkan 2 pindaian tabel yang berbeda dan terpisah .