Mark Byers' answer doesn't work, and it is due to a very subtle way that SQL Server treats nulls. In the WHERE expression " t1.DeleteFlag = 'Y' " if t1.DeleteFlag is NULL, the expression returns a NULL. So doing NOT (NULL) also returns NULL and this fails the WHERE condition. Try doing this test:
DECLARE @myvar VARCHAR(1)
SET @myvar = NULL
SELECT 'OK' WHERE ISNULL(@myvar, 'N') = 'N' -- Baseline statement. Returns OK
SELECT 'OK' WHERE NOT (@myvar = 'Y') -- Equivalent to answer above. Fails
SELECT 'OK' WHERE @myvar = 'N' OR @myvar IS NULL -- This is another way to do it. Also returns OK
The second select statement doesn't return any rows so is therefore not equivalent to the baseline statement and therefore does not work. The third statement is another way to write this query which, one, works, and two, still ensures that an index on the field can be used.
So, here is a correct answer to the question:
SELECT t1.v3, t2.v2
FROM t1
INNER JOIN t2
ON t1.v1 = t2.v1
WHERE (t1.DeleteFlag = 'N' OR t1.DeleteFlag IS NULL)
An alternative to this, which would probably yield nominally better performance results, would be to define the DeleteFlag field as "NOT NULL" and give it a DEFAULT of '' (an empty string). Then, the query can simply be written without worries of NULLs:
SELECT t1.v3, t2.v2
FROM t1
INNER JOIN t2
ON t1.v1 = t2.v1
WHERE t1.DeleteFlag = 'N'