Опитайте:
select a.id, a.x as ax, b.x as bx, x.min_abs_diff
from table_a a
join table_b b
on a.id = b.id
join (select a.id, min(abs(a.x - b.x)) as min_abs_diff
from table_a a
join table_b b
on a.id = b.id
group by a.id) x
on x.id = a.id
and abs(a.x - b.x) = x.min_abs_diff
цигулка:http://sqlfiddle.com/#!15/ab5ae/5/0
Въпреки че не съвпада с очаквания ви изход, смятам, че изходът е правилен въз основа на описаното от вас, както можете да видите, че всяка двойка има разлика с абсолютна стойност 1.
Редактиране - Опитайте следното въз основа на реда от a до b:
select *
from (select a.id,
a.x as ax,
b.x as bx,
x.min_abs_diff,
row_number() over(partition by a.id, b.x order by a.id, a.x) as rn
from table_a a
join table_b b
on a.id = b.id
join (select a.id, min(abs(a.x - b.x)) as min_abs_diff
from table_a a
join table_b b
on a.id = b.id
group by a.id) x
on x.id = a.id
and abs(a.x - b.x) = x.min_abs_diff) x
where x.rn = 1
Fiddle:http://sqlfiddle.com/#!15/ab5ae/19/0