Me quedaría con UNION ALL. Si no hay necesidad de hacer un procesamiento intermedio, por lo tanto, requiere una tabla temporal, entonces no usaría uno.
Insertar datos en una tabla temporal (incluso si es una variable de tabla que a pesar de los mitos, no es una estructura puramente "en memoria") implicará trabajo en tempdb (que puede ser un cuello de botella). Entonces, simplemente SELECCIONAR * tal como está y devolverlo sin ningún procesamiento especial es innecesario y creo que aumenta el código. Cuando solo necesita devolver datos sin ningún procesamiento especial, entonces un enfoque de tabla temporal parece un poco "alrededor de las casas". Si creía que había una razón para justificar el uso de una tabla temporal, ejecutaba algunas pruebas de rendimiento para comparar con vs sin tablas temporales, luego comparaba las estadísticas (duración, lecturas, escrituras, CPU). Hacer las pruebas de rendimiento reales es la mejor manera de tener la mayor confianza posible, independientemente de cuál sea el enfoque que elija, es el mejor. Especialmente porque no tiene que estar usando tablas temporales para que el trabajo se transfiera a tempdb, es decir, dependiendo de sus consultas, podría implicar trabajar en tempdb de todos modos.
Para aclarar, no estoy diciendo que uno sea mejor que el otro punto. Como con la mayoría de las cosas, depende del escenario. En el escenario descrito, suena como si estuvieras agregando un paso adicional que no parece agregar ningún valor funcional y no veo que obtengas nada más que crear una consulta un poco más complicada/larga.
¿Injerto o puede respaldarlo con la teoría? –
@Jonathan Allen - actualizado con un poco más sobre mis pensamientos – AdaTheDev
Para que quede claro, estoy buscando un buen valor predeterminado. Cuando realmente importa, todavía intento probar ambos. –