Como puede ver en el plan de consulta, con CTE, el motor se reserva el derecho de aplicarlos básicamente como una búsqueda, incluso cuando desea una combinación.
Si no está lo suficientemente seguro, puede ejecutar todo de forma independiente, por adelantado, esencialmente generando una tabla temporal... vamos a ejecutarlo una vez para cada fila.
Esto es perfecto para las consultas recursivas que pueden hacer como magia.
Pero está viendo, en los bucles anidados anidados, dónde puede salir terriblemente mal.
Ya está encontrando la respuesta por su cuenta probando la tabla temporal real.