Si realmente desea una muestra aleatoria de filas individuales, modifique su consulta para filtrar las filas al azar, en lugar de usar TABLESAMPLE. Por ejemplo, la siguiente consulta usa la función NEWID para devolver aproximadamente el uno por ciento de las filas de la tabla Sales.SalesOrderDetail:
SELECT * FROM Sales.SalesOrderDetail
WHERE 0.01 >= CAST(CHECKSUM(NEWID(), SalesOrderID) & 0x7fffffff AS float)
/ CAST (0x7fffffff AS int)
La columna SalesOrderID se incluye en la expresión CHECKSUM para que NEWID () se evalúe una vez por fila para lograr el muestreo por fila. La expresión CAST (CHECKSUM (NEWID (), SalesOrderID) & 0x7fffffff AS float / CAST (0x7fffffff AS int) se evalúa como un valor flotante aleatorio entre 0 y 1. "
Fuente: http://technet.microsoft.com/en-us/library/ms189108(v=sql.105).aspx
Esto se explica con más detalle a continuación:
¿Como funciona esto? Dividamos la cláusula WHERE y expliquemosla.
La función CHECKSUM calcula una suma de comprobación sobre los elementos de la lista. Es discutible si SalesOrderID es incluso necesario, ya que NEWID () es una función que devuelve un nuevo GUID aleatorio, por lo que multiplicar una cifra aleatoria por una constante debería resultar en un aleatorio en cualquier caso. De hecho, la exclusión de SalesOrderID parece no hacer ninguna diferencia. Si es un experto en estadística y puede justificar la inclusión de esto, utilice la sección de comentarios a continuación y hágame saber por qué me equivoco.
La función CHECKSUM devuelve un VARBINARIO. Al realizar una operación AND bit a bit con 0x7fffffff, que es el equivalente de (111111111 ...) en binario, se obtiene un valor decimal que es efectivamente una representación de una cadena aleatoria de 0 y 1. Dividir por el coeficiente 0x7fffffff efectivamente normaliza esta cifra decimal a una cifra entre 0 y 1. Luego, para decidir si cada fila merece ser incluida en el conjunto de resultados final, se usa un umbral de 1 / x (en este caso, 0.01) donde x es el porcentaje de los datos que se recuperarán como muestra.
Fuente: https://www.mssqltips.com/sqlservertip/3157/different-ways-to-get-random-data-for-sql-server-data-sampling