Existen ciertas cláusulas que generalmente se sitúan en el SELECT antes del FROM y ayudan en el filtrado de registros. Estas cláusulas son a menudo conocidas como predicados y en esta sección veremos su funcionamiento.
TOP
TOP limita el número de registros que devuelve la consulta a la cantidad especificada en la cláusula.
SELECT TOP 4 *
FROM Clientes
ORDER BY idClientes DESC;
| idClientes | nombre | apellidos | dirección | cuenta |
|---|---|---|---|---|
| 7 | Ignacio | Herrero Dominguez | C/ del girasol 3 | NULL |
| 6 | Paloma | Sanz Valdivia | Av. de la Ilustración 49 | 790763467 |
| 5 | Alejandro | Valero Martinez | C/ Serrano 67 | 778345112 |
| 4 | Luis | Sanchez García | C/ de la luz 21 | 447824556 |
En el resultado de la ejecución, podemos observar que ha devuelto únicamente los últimos 4 registros de la tabla Clientes.
ALL
ALL devuelve todos los registros de la tabla. A diferencia de SELECT *, en SQL Server, SELECT ALL debe ir acompañado de al menos una columna, por lo que su uso es a menudo redundante e innecesario.
| idClientes |
|---|
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
Sin embargo, ALL puede sernos útiles para realizar comparaciones utilizando SUBSELECTS:
| idClientes | idPedidos | producto | precio |
|---|---|---|---|
| 1 | 4 | MacBook Pro M1 | 2449,5 |
| NULL | 8 | Horno Balay | 699,55 |
Esta ejecución nos está devolviendo los registros de la tabla Pedidos cuyos precios sean mayores a todos los precios del idClientes = 2.
La tabla Pedidos, consta de 2 registros para el idClientes = 2 con un precio de 549,95 y 499,99 respectivamente, por lo que nuestra consulta ha devuelto los valores adecuados.
Para entender mejor la importancia de esta cláusula, vamos a intentar ejecutar la SELECT anterior sin la cláusula ALL:
Al tener la tabla Pedidos más de un registro con idClientes = 2, el sistema no es capaz de establecer la comparación. La cláusula ALL en este caso, indicaría al sistema que validase todos los registros con idClientes = 2 y devolver los campos indicados en la consulta principal.
DISTINCT
DISTINCT omite los registros cuyos campos seleccionados contienen datos duplicados.
| idClientes |
|---|
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
Si ejecutáramos la misma consulta sin la cláusula DISTICT, vemos que devuelve registros duplicados, ya que en nuestro sistema hay varios pedidos realizados por el mismo cliente. lo que se traduce que la tabla Pedidos contiene registros con el campo idClientes duplicados.
| idClientes |
|---|
| 1 |
| 2 |
| 2 |
| 3 |
| 4 |
| 4 |
| 5 |