How do dirty reads at both the transaction and table level provide increased performance? I ran the following code past our architect as I thought there may have been a tautology between the isolation level and table hint:

SET NOCOUNT ON 
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

SELECT  p.Forename ,
        g.Descriptor AS PersonGender
FROM    dbo.Person p WITH ( NOLOCK ) ,
        dbo.Gender g WITH ( NOLOCK )
WHERE   p.GenderId = g.Id;


I am assured by the architect (and I have no reason to doubt him) that this is for high volume environments and helps the optimiser better decide about how to improve the performance of the query.

So, some questions:


How does it do this?
Which versions of SQL Server support this?
Is this a documented or undocumented feature?
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED is at the transaction level or at the session level while NOLOCK is a query hint. 

You mentioned that you fully understand dirty reads, so using at the transaction level is what I would recommend.

if you want dirty reads on some tables only, then NOLOCK hint will help you.

SQL server 2005 and up allows you to use SNAPSHOT isolation where readers don't block writers and it uses row versioning with some penalty on tempdb.

essentially SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED and NOLOCK are same thing but the use depends on the context of what you are using.