Recentemente encontrei uma forma muito simples de gerar resultados de forma sorteada no SQL SERVER.
Veja:
Select * from Produtos order by NEWID()
Ao ordenar pela função NEWID() o SQL retorna registros de forma aleatória de maneira rápida e eficiente.
Mas o que mais me deixou curioso, era como a consulta era gerada na mesma performance em modo geral, de uma consulta comum. Desta vez tive que recorrer à teoria.
De forma reduzida funciona do seguinte modo:
- O SQL seleciona por padrão o order by (ID), retornando os identificadores da tabela por padrão.
- O SQL gera um novo ID para cada registro de forma randômica utilizando o padrão GUID.
- O SQL faz a consulta padrão ordenando por ID, só que os registros estarão com os ID modificados, por isto o resultado vem de forma sorteada.
Interessante não é mesmo?
Bom fica a dica para quem um dia precisar!
Abraços a todos 🙂