Cross Join without duplicate combinations
select A.id aid,B.id bid
from A inner join B on a.id <= b.id
union
select B.id,A.id
from A inner join B on b.id < a.id
If you wanted to be more sophisticated:
select distinct
case when a.id<=b.id then a.id else b.id end id1,
case when a.id<=b.id then b.id else a.id end id2
from A cross join B
In my little unscientific bake off with tiny tables, the latter was faster. And below, the case
expressions written as subqueries.
select distinct
(select MIN(id) from (select a.id union select b.id)[ ]) id1,
(select MAX(id) from (select a.id union select b.id)[ ]) id2
from A cross join B
Wouldn't this give the desired result as well?
select A.id,B.id from A cross join B on A.id >= B.id