En este post te voy a mostrar dos opciones que tenemos en SQL para hacer una búsqueda aleatoria de registros en una tabla y compararlas.
Opción ORDER BY con NEWID()
Esta es una opción de las mas encontradas en internet como ejemplo de búsqueda y consta simplemente en hacer tu consulta y luego agregar un Order BY NEWID() como es el siguiente ejemplo:
USE ADVENTUREWORKS2019
GO
SELECT TOP (100) *
FROM
SALES.SALESORDERDETAIL
ORDER BY NEWID()
Opción con TABLESAMPLE
Esta otra opción utiliza la función TABLESAMPLE la cual es nativa y pensada para hacer esto, la misma funciona con paginas de registros y también se le puede poner cantidades pero no suelen ser exactas y lo que debemos hacer si por ejemplo queremos traer un random de 100 registros es poner números mas altos como el caso del ejemplo siguiente
SELECT TOP (100) *
FROM
SALES.SALESORDERDETAIL TABLESAMPLE (1000 ROWS)
Performance
Ambos casos que he mostrado darán los mismos resultados funcionales, ¿ pero que pasara con la performance? bueno para eso mostrare ambos planes de ejecución y algunos detalles


Al observar ambos planes vemos una diferencia sustancial, ahora para la misma operación voy a ver el costo de cada uno de ellos
Método | Costo Plan ejecución |
NEWID() | 3.34 |
TABLESAMPLE | 0.0041 |
Sin ninguna duda que la diferencia que se observo en los planes de ejecución se ve muy marcada en los costos en donde usar el TABLESAMPLE es mucho mas eficiente que el otro método