Я ищу ответ о том, как предложение DISTINCT работает в SQL (SQL Server 2008, если это имеет значение) на запрос с несколькими объединенными таблицами?
Я имею в виду, как механизм SQL обрабатывает запрос с предложением DISTINCT?
Причина, по которой я спрашиваю, заключается в том, что мой гораздо более опытный коллега сказал мне, что SQL применяет DISTINCT к каждому полю каждой таблицы. Мне это кажется маловероятным, но я хочу убедиться ....
Например, наличие двух таблиц:
CREATE TABLE users
(
u_id INT PRIMARY KEY,
u_name VARCHAR(30),
u_password VARCHAR(30)
)
CREATE TABLE roles
(
r_id INT PRIMARY KEY,
r_name VARCHAR(30)
)
CREATE TABLE users_l_roles
(
u_id INT FOREIGN KEY REFERENCES users(u_id) ,
r_id INT FOREIGN KEY REFERENCES roles(r_id)
)
А затем этот запрос:
SELECT u_name
FROM users
INNER JOIN users_l_roles ON users.u_id = users_l_roles.u_id
INNER JOIN roles ON users_l_roles.r_id = roles.r_id
Предполагая, что существует пользователь с двумя ролями, приведенный выше запрос вернет две записи с одинаковым именем пользователя.
Но этот запрос с отличным:
SELECT DISTINCT u_name
FROM users
INNER JOIN users_l_roles ON users.u_id = users_l_roles.u_id
INNER JOIN roles ON users_l_roles.r_id = roles.r_id
вернет только одно имя пользователя.
Вопрос в том, будет ли SQL сравнивать все поля из всех объединенных таблиц (u_id, u_name, u_password, r_id, r_name) или он будет сравнивать только именованные поля в запросе (u_name) и различать результаты?