Нужно ли делать алиас, если он совпадает с названием таблицы
Что проверяют
Знаете ли вы правило видимости имён в SQL и не путаете ли алиас с косметикой. За вопросом обычно стоит второй, более важный: где алиас обязателен и что ломается, когда его нет.
Как отвечать
По сути: алиас, дословно повторяющий имя таблицы, не запрещён, но бесполезен. Запись from orders orders эквивалентна from orders, и добавлять её ради единообразия смысла нет. Гораздо важнее знать обратное правило: как только вы задали алиас, обращаться к таблице по исходному имени уже нельзя, from orders o where orders.id = 1 упадёт с ошибкой разрешения имени.
Перечислите случаи, где алиас обязателен: соединение таблицы с самой собой, подзапрос в from (в PostgreSQL и MySQL производная таблица без имени это синтаксическая ошибка), одноимённые колонки из разных таблиц в одном соединении.
Добавьте контекст Java. В JPQL и HQL алиас сущности нужен почти всегда, обращаться к полям по имени сущности нельзя: select o from Order o where o.status = :status. В Criteria API его роль играют Root и Join. А в нативных запросах через @Query(nativeQuery = true) алиасы колонок перестают быть украшением: по ним раскладывается результат в проекцию или в @SqlResultSetMapping, и два id из разных таблиц без разных алиасов дадут конфликт имён.
Отдельно стоит сказать, что на производительность алиасы не влияют: это имя на этапе разбора запроса, план от него не меняется.
Где спотыкаются
Задают алиас и продолжают писать полное имя таблицы в where или в списке выборки. Ошибка вылезает не сразу, потому что в простом запросе без алиаса всё работало.
Второе: экономят на смысле и называют всё t1, t2, a, b. В запросе с семью соединениями такой текст невозможно читать на ревью, а именно там ловят лишний join, размножающий строки.
Третье: пытаются использовать алиас колонки из select внутри where. Фильтрация вычисляется раньше списка выборки, поэтому выражение повторяют целиком или выносят в подзапрос, тогда как в order by тот же алиас доступен.