Necesitas crear una tabla adicional (temporal, permanente o como retorno de una función) que contenga todos los períodos posibles y usarla en un outer join para generar los registros que faltan. Un poco simplificado, el ejemplo sería algo así:
Código:
create table facturas (id numeric(8), fecha_factura datetime)
insert into facturas values (1,'20110101')
--no hay facturas con fecha 20110102
insert into facturas values (2,'20110103')
insert into facturas values (3,'20110104')
go
create table periodos (fecha datetime)
insert into periodos values ('20110101')
insert into periodos values ('20110102')
insert into periodos values ('20110103')
insert into periodos values ('20110104')
go
select
isnull(facturas.id,0) factura,
facturas.fecha_factura,
periodos.fecha periodo
from periodos
left join facturas on facturas.fecha_factura = periodos.fecha
go
--resultado de la consulta
factura fecha_factura periodo
1 2011-01-01 2011-01-01
0 NULL 2011-01-02 --período con 0 si no hay factura
2 2011-01-03 2011-01-03
3 2011-01-04 2011-01-04
Saludos