• A DELETE-JOIN will work well. One other option I thought I would share. After working with it more and more I find the MERGE syntax to be quite intuitive and a little easier to use when debugging (my opinion). With the query written this way I can highlight the SELECT statement in the USING clause to see what would be deleted without changing the query or carrying additional debug-comments in the code:

    BEGIN TRAN;

    MERGE dbo.BC_ShiftSummaryInfo AS target

    USING

    (

    SELECT A.SS_ID

    FROM dbo.BC_ShiftSummaryInfo A

    JOIN dbo.BC_ShiftSummary B ON A.SS_ID = B.SS_ID

    WHERE B.ShiftStartDate BETWEEN '2012-12-14 06:00:00.000'

    AND '2012-12-14 22:00:00.000'

    ) AS source (SS_ID)

    ON source.SS_ID = target.SS_ID

    WHEN MATCHED

    THEN DELETE;

    ROLLBACK;

    OUTPUT is also supported with MERGE:

    BEGIN TRAN;

    MERGE dbo.BC_ShiftSummaryInfo AS target

    USING

    (

    SELECT A.SS_ID

    FROM dbo.BC_ShiftSummaryInfo A

    JOIN dbo.BC_ShiftSummary B ON A.SS_ID = B.SS_ID

    WHERE B.ShiftStartDate BETWEEN '2012-12-14 06:00:00.000'

    AND '2012-12-14 22:00:00.000' ) AS source (SS_ID)

    ON source.SS_ID = target.SS_ID

    WHEN MATCHED

    THEN DELETE

    OUTPUT

    $ACTION,

    DELETED.*;

    ROLLBACK;

    There are no special teachers of virtue, because virtue is taught by the whole community.
    --Plato