• Situation #1

    Use a Derived Table (Or a Common Table Expression [CTE] in SqlServer 2005) and lose the variables:

    SELECT

      t1.col1, t1.col2, dt.col1, dt.col2 

    FROM

      Customer t1

    CROSS JOIN 

     (

        SELECT TOP 1 col1, col2

        FROM GeneralInfo t2

     \) dt

    WHERE t1.status > 0

    Situation #2

    Discussion is incomplete without mentioning effect of concurrency & transaction isolation. Yes, splitting into smaller queries may reduce lock hold time and reduce contention, but what does that gain if the end result is *different* than 1 large statement, because other processes changed data between the steps of a broken out process ?