Es muy habitual ver consultas que emplean la cláusula distinct
como si fuese una función, es decir, encerrando entre paréntesis un campo como si fuese un parámetro de invocación a la función.
Un ejemplo:
select distinct(nombre)
from persona;
La cláusula distinct
sirve para evitar que aparezcan tuplas repetidas en el resultado de una consulta.
Y hay que insistir en que distinct
no es una función, ni una cláusula que pueda aparecer sola. Siempre va ligada a un select
previo. Así podemos usar "select distinct
" o "select all
", que es lo mismo que "select
", ya que "all
" es el modo por defecto del select
(en este caso no se eliminarán los repetidos). Pero no podemos ver un "distinct
" en solitario (sin estar pegado a un select
previo), ni usarlo como una función.
Bueno, pero me podréis decir que si se ejecuta el comando anterior no se produce ningún error; incluso que distinct
actúa y elimina los repetidos. ¿Por qué ocurre esto? Y la respuesta es que los paréntesis en el comando anterior son irrelevantes. También podríamos haberlos usado en una consulta como esta:
select (nombre), (apellidos)
from persona;
Los paréntesis alrededor del nombre de un campo no tienen ningún efecto. Podríamos compararlo a una operación aritmética como esta (1) + (2)
, donde los paréntesis son innecesarios.
Por eso, estas dos consultas son la misma, pero la de la izquierda es síntoma de un error de concepto (el de pensar que distinct
es una función) y, por ello será penalizado en la corrección de ejercicios.
select distinct(nombre)
from persona;
select distinct nombre
from persona;
No hay comentarios:
Publicar un comentario