Jawabannya sederhana.
SQL Server tidak mewujudkan CTE. Ini membuat mereka sejajar, seperti yang Anda lihat dari rencana eksekusi.
DBMS lain mungkin mengimplementasikannya secara berbeda, contoh yang terkenal adalah Postgres, yang mewujudkan CTE (pada dasarnya membuat tabel sementara untuk CTE di belakang kap).
Apakah perwujudan eksplisit hasil perantara dalam tabel sementara eksplisit lebih cepat, tergantung pada kueri.
Dalam kueri kompleks, overhead penulisan dan pembacaan data perantara ke dalam tabel sementara dapat diimbangi dengan rencana eksekusi sederhana yang lebih efisien yang dapat dihasilkan oleh pengoptimal.
Di sisi lain, di Postgres CTE adalah "pagar optimasi" dan mesin tidak dapat mendorong predikat melintasi batas CTE.
Terkadang satu cara lebih baik, terkadang cara lain. Setelah kompleksitas kueri tumbuh melampaui ambang batas tertentu, pengoptimal tidak dapat menganalisis semua cara yang mungkin untuk memproses data dan harus menyelesaikan sesuatu. Misalnya, urutan untuk bergabung dengan tabel. Jumlah permutasi tumbuh secara eksponensial dengan jumlah tabel untuk dipilih. Pengoptimal memiliki waktu terbatas untuk membuat rencana, sehingga mungkin membuat pilihan yang buruk saat semua CTE disejajarkan. Saat Anda memecah kueri kompleks menjadi kueri sederhana yang lebih kecil secara manual, Anda perlu memahami apa yang Anda lakukan, tetapi pengoptimal memiliki peluang lebih baik untuk menghasilkan rencana yang baik untuk setiap kueri sederhana.