あなたがそれを理解していない場合を除いて、その結果について予期しないことは何もありません.
各 CTE は each and every time
解決されます 参照されます。はい、これが、非常にトランザクションの多いテーブルの単純な CTE が、1 つの参照で 4 行を返し、次の 2 レベル下で 5 行を返す可能性がある理由です。
ただし、サンプルでは、ORDER BY NEWID() が原因で、元の CTE の各解像度に異なる row_number()-ing を与えます。 CTE はメモリに保存され、キャッシュされると思いましたか? SQLFiddle サイトの結果の下に、「実行計画の表示」リンクがあります。 テーブルの 2 つの異なる別々のスキャンを示しています .