• Hi there,
                in terms of performance, one thing you'll need - in order to prevent issues with other processes, even when they will not be touching the records in question is lock escalation. 
        Very briefly:
            Initially, your SQL Server engine will look at either taking out row or page locks on the table concerned.
            However, locks have a cost in terms of management and resource allocation - they're, to a degree, expensive.
            Therefore, after a certain threshold, where the Engine considers locking the individual records / pages in question too expensive, it will escalate the lock to a table lock.  This prevents other processes accessing those records, due to an inability to take out their own locks.
            The approximate threshold per operation is c. 5000 locks (3000 pre 2005).

    So, something based around this;

    DECLARE @Rows INT = 1
    WHILE @Rows > 0
    BEGIN
        DELETE TOP <number>
        FROM <table>
        WHERE <your filter>
        SELECT @Rows = @@ROWCOUNT
    END
    PRINT 'Done'

    I'm a DBA.
    I'm not paid to solve problems. I'm paid to prevent them.