Paul White shows how UNION ALL concatenation has changed since SQL Server 2008 R2:
The concatenation of two or more data sets is most commonly expressed in T-SQL using the
UNION ALL
clause. Given that the SQL Server optimizer can often reorder things like joins and aggregates to improve performance, it is quite reasonable to expect that SQL Server would also consider reordering concatenation inputs, where this would provide an advantage. For example, the optimizer could consider the benefits of rewritingA UNION ALL B
asB UNION ALL A
.In fact, the SQL Server optimizer does not do this. More precisely, there was some limited support for concatenation input reordering in SQL Server releases up to 2008 R2, but this was removed in SQL Server 2012, and has not resurfaced since.
It’s an interesting article about an edge case.