• similarly to find all events that overlapped with a period of time, you might go:

    select blah

    from events ev

    where ev.start_date_time <= '20100701'

    and (ev.end_date_time > '20100101' or ev.end_date_time is null)

    If it was your job to design these tables, would you be tempted to have an end_date_time column that could not be null, and instead substitute a ridiculous future date for all events that have not yet ended (like 22000101)? Are there indexing or other performance advantages to making your end_date_time column not null?

    Absolutely would put a rediculous enddate in place. NULL values are stored as a bitmap at the leaf level of on index (clustered or otherwise), but are not used in the B-Tree portion of an index. In some cases you will get seek-like behavior out of NULLS, because the optimizer can basically do an inverse search. Dates are a fixed length fields, so NULL or not, you are still taking the same amount of physical space. By specifying a rediculous date as the End_Date_Time, your query eliminates the NULL check, and can always rely on the B-Tree portion of an index that uses End_Date_Time in the key and perform a SEEK.