Отсутствие псевдонима таблицы действительно приводит к неоднозначной ссылке на столбец. Просто сделайте ваш join
a left join
, и вы сразу поймете, почему:
select * from customer c
left join order o
on c.customerid = o.customerid
where customerid = 100 -- here, the semantics are quite different
Другая причина: один столбец может быть типа INTEGER
, другой - типа SMALLINT
. Какой из них использовать для фильтра? (Это может иметь последствия для плана выполнения). Еще лучший пример дает Мартин Смит
Таким образом, в целом, вы не получите много пользы, сделав SQL более «прощающим», и в то же время введете новые источники ошибок. Что вы могли бы сделать с некоторыми базами данных (не SQL Server), однако это:
select * from customer c
join order o
using (customerid)
where customerid = 100
Или вот это (если customerid - единственное общее имя столбца)
select * from customer c
natural join order o
where customerid = 100