Se você realmente deseja uma amostra aleatória de linhas individuais, modifique sua consulta para filtrar linhas aleatoriamente, em vez de usar TABLESAMPLE. Por exemplo, a consulta a seguir usa a função NEWID para retornar aproximadamente um por cento das linhas da tabela Sales.SalesOrderDetail:
SELECT * FROM Sales.SalesOrderDetail
WHERE 0.01 >= CAST(CHECKSUM(NEWID(), SalesOrderID) & 0x7fffffff AS float)
/ CAST (0x7fffffff AS int)
A coluna SalesOrderID é incluída na expressão CHECKSUM para que NEWID () seja avaliada uma vez por linha para obter a amostragem por linha. A expressão CAST (CHECKSUM (NEWID (), SalesOrderID) & 0x7fffffff AS float / CAST (0x7fffffff AS int) é avaliada como um valor flutuante aleatório entre 0 e 1. "
Fonte: http://technet.microsoft.com/en-us/library/ms189108(v=sql.105).aspx
Isso é explicado mais detalhadamente abaixo:
Como é que isso funciona? Vamos dividir a cláusula WHERE e explicá-la.
A função CHECKSUM está calculando uma soma de verificação sobre os itens da lista. É discutível se SalesOrderID é mesmo necessário, uma vez que NEWID () é uma função que retorna um novo GUID aleatório, portanto, multiplicar uma figura aleatória por uma constante deve resultar em um aleatório em qualquer caso. Na verdade, excluir SalesOrderID parece não fazer diferença. Se você é um especialista em estatística e pode justificar a inclusão disso, por favor use a seção de comentários abaixo e me diga porque estou errado!
A função CHECKSUM retorna um VARBINÁRIO. Realizar uma operação AND bit a bit com 0x7fffffff, que é o equivalente a (111111111 ...) em binário, produz um valor decimal que é efetivamente uma representação de uma string aleatória de 0s e 1s. A divisão pelo coeficiente 0x7fffffff normaliza efetivamente este número decimal para um número entre 0 e 1. Em seguida, para decidir se cada linha merece inclusão no conjunto de resultados final, um limite de 1 / x é usado (neste caso, 0,01), onde x é a porcentagem dos dados a serem recuperados como uma amostra.
Fonte: https://www.mssqltips.com/sqlservertip/3157/different-ways-to-get-random-data-for-sql-server-data-sampling