【SQLServer】order byした表同士をUNION

order byした表同士をUNIONしようとするとエラーで弾かれます。
副問い合わせ+OFFSET FETCHを指定すると正常に実行可能です。

テストテーブル作成

SQL
--テストテーブル作成
create table #testA
(
	[ID] int,
	[score] int
)
create table #testB
(
	[ID] int,
	[score] int
)
--テストデータ挿入
insert into 
	[#testA] 
values	
	(2,78),
	(3,91),
	(1,65)
insert into 
	[#testB]
values	
	(2,48),
	(7,58),
	(1,82)
SQL

実行例

↓これは実行不可

SQL
--実行不可
select * from [#testA] order by [ID]
UNION ALL
select * from [#testB] order by [ID]
SQL

↓副問い合わせとOFFSET FETCHを指定すれば実行可能

SQL
--実行可能
--OFFSET → スキップする行数
--FETCH NEXT → OFFSET後に取得する行数
select * from
(select * from [#testA] order by ID OFFSET 0 ROWS FETCH NEXT 9999 ROWS ONLY) as [a] 
UNION ALL
select * from 
(select * from [#testB] order by ID OFFSET 0 ROWS FETCH NEXT 9999 ROWS ONLY) as [b]
SQL

【結果】

IDscore
165
278
391
182
248
758