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