Когда автомобиль присутствует, ваш набор результатов всегда ассоциирует «Боб» с «BMD» и «Энди» с «Audi». Я предполагаю, однако, что в реальном наборе данных есть владельцы, которые могут иметь более одного типа автомобилей. Таким образом, возникает вопрос: «какой из них вы выбираете?».
Если это действительно произвольно и не имеет значения, тогда ваш существующий подход, использующий 'max', подойдет. По крайней мере, он имеет предсказуемый порядок по умолчанию, так что вы будете получать один и тот же вывод при каждом прогоне при одинаковом состоянии данных в базовых таблицах.
Однако, если что-то еще должно считаться «первым», например, если вы хотите основать сравнение на поле «id», то вы захотите использовать «row_number» для упорядочения по этому полю для внутри каждый владелец, как в коде ниже.
select owner, car
from (
select *,
ord = row_number() over(partition by owner order by id)
from [Table A] a
left join [Table B] b on a.id = b.car_id
where b.car is not null
) orderings
where ord = 1