Không có gì bất ngờ về kết quả đó, ngoại trừ có thể nếu bạn không hiểu nó.
Mỗi CTE được giải quyết each and every time
nó được tham chiếu. Có, đây là lý do tại sao CTE đơn giản trên bảng có tính giao dịch cao có thể trả về 4 hàng trong một tham chiếu và 5 hàng ở 2 cấp tiếp theo.
Tuy nhiên, trên mẫu của bạn, đó là do ORDER BY NEWID (), cung cấp cho mỗi độ phân giải của CTE ban đầu một row_number () - ing khác nhau. Bạn có nghĩ rằng CTE được lưu trữ trong bộ nhớ và được lưu vào bộ nhớ đệm không? Trên trang SQLFiddle, dưới kết quả của bạn, có một liên kết "xem kế hoạch thực hiện". Nó hiển thị 2 lần quét bảng riêng biệt, riêng biệt .