Implementing soft delete
I have always implemented a Soft Delete by including two additional columns in my tables, one for status and one for delete date.

My table structure would be similar to the following:

create table myTable
(
  id int,
  name varchar(50),
  IsDeleted bit,
  DeletedDate datetime
);


The IsDeleted column has a default value of no and the DeletedDate is not populated until the row is actually marked as deleted.  I include a date column in the event I ever want to know when a row was soft deleted.

Then when you query your data, you will include this column in the WHERE clause:

select id, name
from myTable
where IsDeleted = 0


Note: You will want to include an index on the IsDeleted column.