SELECT TOP com WITH TIES no SQL Server
- Amanda Nascimento
- 2 de jun.
- 1 min de leitura
Quando você usa o comando SELECT TOP no SQL Server, está dizendo à engine: “traga apenas os primeiros registros dessa consulta, com base em uma ordenação”. Mas o que acontece se houver empates no valor de ordenação? É aí que entra o poderoso WITH TIES 🤩
A cláusula WITH TIES serve para incluir todos os registros que tenham o mesmo valor no critério de ordenação do último registro retornado pelo TOP.
Imagine que vários alunos tiraram a mesma nota final. Se você quiser exibir os "Top 5 melhores alunos" mas não excluir alguém apenas por empate na nota, o WITH TIES garante justiça e transparência.
Exemplo SEM o WITH TIES
select top 5 *
from notas
where nota >= 7.0
Esse comando retorna apenas 5 registros, mesmo que existam outros alunos com a mesma nota do quinto colocado.

Top 5 com WITH TIES. Na base de exemplo, existem 3 alunos com nota 7.10 e com isso, o retorno será as 5 primeiras maiores notas trazendo todo o grupo conforme exemplo abaixo:
select top 5 WITH TIES *
from notas
where nota >= 7.0
order by nota DESC
Esse comando ainda seleciona os 5 primeiros registros com maior nota, mas também adiciona quaisquer outros registros que estejam empatados na mesma nota do último da lista.

O WITH TIES só funciona corretamente quando há uma cláusula ORDER BY, já que ele precisa de um critério claro para saber onde há empate.