This appears to be basically a duplicate of SQL Server Random Sort which is basically a duplicate of How to request a random row in SQL?.
The latter has a comprehensive answer for multiple RDBMSs referencing this post:
SQL to Select a random row from a database table
An answer for Microsoft SQL Server would be:
SELECT TOP 10 * FROM table
ORDER BY NEWID();
This will not perform well on large tables. It scans the entire table, generating a unique number (a 16-bit GUID) for each row, and then sorts the results by that unique number.
Simply ordering by RAND() in SQL Server will not result in a random list of records. RAND() is evaluated once at the beginning of the statement, so you are effectively ordering by a constant, which isn't really ordering at all. You'll get the same results without the ORDER BY. Indeed, in my instance of SQL Server 2005, the query plans and results were the same with and without the ORDER BY RAND().
RAND() in SQL Server takes a seed value, so you might think that you could pass a varying table column value into the RAND function and get random results. In some sense, you can. You could pass an IDENTITY or other unique column into the RAND function and you won't get the same order as without. And the order will be random in the sense that it appears so to a casual observer. But it's repeatable. The RAND() function in SQL Server will always return the same value for the same seed on the same connection:
"For one connection, if RAND() is called with a specified seed value, all subsequent calls of RAND() produce results based on the seeded RAND() call."
http://technet.microsoft.com/en-us/library/ms177610.aspx
So while you would get what appeared to be a random list, if you executed it multiple times in the same connection, you would get the same list. Depending on your requirements, that might be good enough.
Based on my limited tests on a small table, the RAND with a unique column seed had a very slightly lower estimated query cost.