Get all rows in table A even if no rows in table B in CROSS JOIN I Have This query

SELECT *
FROM ( ( SELECT SUM(Auditoria.Importe - ISNULL(Auditoria.Pago, 0)) AS Deuda
         FROM Auditoria 
           INNER JOIN
              Articulos_Auditoria ON Auditoria.CUD = Articulos_Auditoria.CUD 
           LEFT OUTER JOIN
              Cancelaciones ON Auditoria.CUD = Cancelaciones.CUD
         WHERE (Cancelaciones.CUD IS NULL) 
           AND ( CAST(Auditoria.Fecha AS date) &lt;= CAST(@Fecha AS date) ) 
           AND (Auditoria.Terminal = @Term) 
           AND (Auditoria.Id_Empresa = @empresa)
           AND (Articulos_Auditoria.Cortado = 0)
        ) AS Deuda      
     CROSS JOIN 
       ( SELECT DISTINCT Pagos_Auditoria.TipoPago, 
                         SUM(Pagos_Auditoria.Cantidad) AS Cant
         FROM Pagos_Auditoria 
           INNER JOIN
              Auditoria ON Pagos_Auditoria.CUD = Auditoria.CUD 
           INNER JOIN
              Articulos_Auditoria ON Auditoria.CUD = Articulos_Auditoria.CUD
         WHERE ( ( ( CAST([Fecha] as date) ) &lt;= CAST(@Fecha as date) ) 
             AND (Auditoria.Terminal = @Term) 
             AND (Articulos_Auditoria.Cortado = 0) 
             AND (Auditoria.Id_Empresa = @empresa)
               )
         GROUP BY Pagos_Auditoria.TipoPago
       ) AS Pagos
     )


Table A is Deudas an table B is Pagos. It works fine when rows in Table B (Pagos) are returned, but I want to see rows in table A and get 0 in fields of table B if no rows are
returned from Table B. 

Specifications
 - Table A Deudas have always rows to return
 - Table B Pagos may have rows to return
 - There's no ID or Key between the tables

I tried a sub SELECT ... WHERE NOT EXIST but for the quantity of 
evaluated rows is not very efficient.

What is the simplest way to do it?

Edit 1

I tried

SELECT *
FROM ((SELECT        SUM(Auditoria.Importe - ISNULL(Auditoria.Pago, 0)) AS Deuda
FROM            Auditoria INNER JOIN
                            Articulos_Auditoria ON Auditoria.CUD = Articulos_Auditoria.CUD LEFT OUTER JOIN
                            Cancelaciones ON Auditoria.CUD = Cancelaciones.CUD
WHERE        (Cancelaciones.CUD IS NULL) AND (CAST(Auditoria.Fecha AS date) &lt;= CAST(@Fecha AS date)) AND (Auditoria.Terminal = @Term) AND (Auditoria.Id_Empresa = @empresa) AND (Articulos_Auditoria.Cortado = 0)) AS Deuda

LEFT JOIN

(SELECT DISTINCT Pagos_Auditoria.TipoPago, SUM(Pagos_Auditoria.Cantidad) AS Cant
FROM            Pagos_Auditoria INNER JOIN
        Auditoria ON Pagos_Auditoria.CUD = Auditoria.CUD INNER JOIN
        Articulos_Auditoria ON Auditoria.CUD = Articulos_Auditoria.CUD
WHERE (((CAST([Fecha] as date))&lt;=CAST(@Fecha as date)) AND (Auditoria.Terminal = @Term) AND (Articulos_Auditoria.Cortado = 0) AND (Auditoria.Id_Empresa = @empresa))
GROUP BY Pagos_Auditoria.TipoPago) AS Pagos ON TRUE)


but I get


  An expression of non-boolean type specified in a context where a condition is expected, near ')'.


I'm missing something?
You can use an outer apply instead of a cross join.

Using this simplified table structure.

create table T1(ID1 int);
create table T2(ID2 int);


Add three rows to T1

insert into T1 values(1);
insert into T1 values(2);
insert into T1 values(3);


Query with outer apply.

select T1.ID1,
       T2.ID2
from T1
  outer apply (
              select T2.ID2
              from T2
              ) as T2;


Result:

ID1         ID2
----------- -----------
1           NULL
2           NULL
3           NULL


Add one row to T2

insert into T2 values(1);


Result:

ID1         ID2
----------- -----------
1           1
2           1
3           1