Estoy buscando la respuesta sobre cómo funciona la cláusula DISTINCT en SQL (SQL Server 2008 si eso hace la diferencia) en una consulta con varias tablas unidas?¿Cómo funciona la cláusula DISTINCT de SQL?
Me refiero a cómo el motor SQL maneja la consulta con la cláusula DISTINCT?
La razón por la que estoy preguntando es que mi colega más experimentado me dijo que SQL aplica DISTINCT en todos los campos de todas las tablas. Parece poco probable para mí, pero yo quiero para asegurarse ....
Por ejemplo tener dos tablas:
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)
)
y luego tener esta consulta:
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
Suponiendo que no era usuario con dos roles, la consulta anterior devolverá dos registros con el mismo nombre de usuario.
Pero esta consulta con distinta:
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
volverá solamente un nombre de usuario.
La pregunta es si SQL comparará todos los campos de todas las tablas unidas (u_id, u_name, u_password, r_id, r_name) o solo comparará los campos con nombre en la consulta (u_name) y distinguirá los resultados?
you shuold examine el plan de explicación de cómo su motor SQL decide manejar su sintaxis. – Randy