¿Cuáles son las ventajas / desventajas de usar un CTE?

Estoy buscando mejorar el performance de algunos SQL, actualmente los CTE se usan y se referencen varias veces en el script. ¿Obtendría mejoras usando una variable de tabla en su lugar? (No se puede usar una tabla temporal ya que el código está dentro de las funciones).

Realmente tendrá que realizar una testing de performance: no hay respuesta Sí / No. Según los enlaces de la publicación anterior de Andy Living, un CTE es solo una abreviatura de una consulta o subconsulta.

Si lo llama dos o más veces en la misma function, puede get un mejor performance si llena una variable de tabla y luego se une a / selecciona desde allí. Sin embargo, como las variables de tabla ocupan espacio en alguna parte, y no tienen índices / statistics (con la exception de cualquier key primaria declarada en la variable de la tabla) no hay forma de decir cuál será más rápido.

Ambos tienen costos y ahorros, y la mejor forma de hacerlo depende de la información que obtienen y de lo que hacen con ella. He estado en su situación, y después de probar la velocidad en diversas condiciones: algunas funciones usaban CTE y otras usaban variables de tabla.

Probablemente no. Los CTE son especialmente buenos para consultar datos de estructuras de treees.