Mejor práctica: select * en CTE

La siguiente publicación tenía razones convincentes para evitar en general el uso de select * en SQL.

¿Por qué SELECT * se considera perjudicial?

En la discusión hubo ejemplos de cuándo era o no aceptable usar select * Sin embargo, no parecía haber discusión sobre la expresión de tabla común (CTE). ¿Hay algún inconveniente para usar select * en CTE?

Ejemplo:

 WITH CTE1 AS ( SELECT Doc, TotalDue FROM ARInvoices WHERE CustomerName = 'ABC' UNION SELECT Doc, - TotalDue FROM ARInvoiceMemos WHERE CustomerName = 'ABC' ) select * from CTE1 UNION Select 'Total' as Doc, sum(TotalDue) FROM CTE1 

Como ya ha enumerado correctamente los nombres de las columnas en el cte , no veo ningún daño al usar select * del cte .
De hecho, podría ser el lugar correcto para usar select * , ya que no tiene sentido enumerar las columnas dos veces.
A less que no necesite usar todas las columnas devueltas por el cte . (es decir, una columna en el cte se usa en la consulta, pero no en la cláusula de select ) En ese caso, sugeriría que se enumeren solo las columnas que necesita, incluso si el que está apuntando a una cte .

Tenga en count que si la cte usa select * entonces todos los inconvenientes enumerados en la publicación a la que se ha vinculado se aplican a ella.

Mi principal objeción para select * es que generalmente es usado por desarrolladores perezosos que no consideran las consecuencias del * .

Nota: Todo lo que he escrito aquí también se aplica a las tablas derivadas.

En teoría, siempre se aplica la regla empírica de que select * es desaconsejable.

Sin embargo, en la práctica, si usted es un desarrollador que considera que el layout y la buena práctica de progtwigción son tan importantes como la funcionalidad, su CTE probablemente se codificará solo para devolver las columnas que realmente se necesitan, por lo que select * from CTE1 podría no serlo malo.