Duvidas em uma consulta no banco de dados

Confesso que sou novato em banco de dados. E com isso preciso por favor criar uma consulta em banco para puxar os pagamentos feito em cheque e cartão de credito. Tentei, porem da erro na que informo as datas de compensação.

Segue o script.

SELECT DISTINCT
  mprod.codigo            AS codProduto,
  mprod.totalfinal,
  mpm.valor,
  sum(pmp.valorpago),
  mprod.situacao,
  mpar.datavencimento,
  rp.data                 AS datapagamento,
  pc.codigoplanocontas,
  pc.nome                 AS nomePlanoContas,
  mprod.anoreferencia,
  mprod.descricao         AS descricaoMovProduto,
  p.nome                  AS pessoa,
  p.codigo                AS codPessoa,
  
  
  cat.nome                AS categoria,
  array_to_string(array(select telefone.numero from telefone where telefone.pessoa = p.codigo), ', ') as telefone
FROM movparcela mpar
  INNER JOIN movprodutoparcela mpp ON mpar.codigo = mpp.movparcela
  INNER JOIN movproduto mprod ON mpp.movproduto = mprod.codigo
  LEFT JOIN movprodutomodalidade mpm ON mprod.codigo = mpm.movproduto
  LEFT JOIN movpagamento mpag ON mpag.recibopagamento = mpp.recibopagamento
  LEFT JOIN recibopagamento rp ON rp.codigo = mpag.recibopagamento
  LEFT JOIN pagamentomovparcela pmp ON mpag.codigo = pmp.movpagamento
  LEFT JOIN rateiointegracao rateio ON (mprod.produto = rateio.produto OR mpm.modalidade = rateio.modalidade)
  LEFT JOIN planoconta pc ON rateio.planoconta = pc.codigo
  LEFT JOIN pessoa p ON mprod.pessoa = p.codigo
  LEFT JOIN cliente c ON c.pessoa = p.codigo
  LEFT JOIN categoria cat ON cat.codigo = c.categoria 
  LEFT OUTER JOIN cheque on mpag.codigo = cheque.movpagamento and cheque.situacao not like 'CA'
  LEFT OUTER  JOIN cartaocredito on mpag.codigo = cartaocredito.movpagamento AND cartaocredito.situacao not like 'CA'
  INNER JOIN formapagamento fp on mpag.formapagamento = fp.codigo and not fp.somentefinanceiro

  WHERE mpag.empresa AND p.empresa (
      (mpag.datapagamento >= '2017-07-01 00:00:00' AND mpag.datapagamento <=  '2017-07-02 23:59:59'  AND fp.tipoformapagamento IN ('AV','CD','CC','BB','CO')
      OR (cheque.datacompensacao >= '2017-07-01 00:00:00' AND cheque.datacompensacao <= '2017-07-01 00:00:00')
      OR (cartaocredito.datacompensacao >= '2017-07-01 00:00:00' AND cheque.datacompensacao <= '2017-07-01 00:00:00')))
    
      AND mprod.situacao <> 'CA'
      AND c.codigomatricula = 014467
      AND coalesce(mprod.juros, 0) = 0
      AND coalesce(mprod.multa, 0) = 0
GROUP BY 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, cat.nome

Para consultar intervalo de datas use o comando BETWEEN.

Segue exemplo:

SELECT * FROM Tabela WHERE ColunaData BETWEEN '01-01-2017' AND '13-07-2017'

sim , mas no caso o que esta dando errado é na condição OR, que não consegui implementar da forma correta.

WHERE mpag.empresa AND p.codigo  (
  AND  mpag.datapagamento >= '2017-07-01 00:00:00' AND mpag.datapagamento <=  '2017-07-02 23:59:59'  AND fp.tipoformapagamento IN ('AV','CD','CC','BB','CO')
  OR (cheque.datacompensacao >= '2017-07-01 00:00:00' AND cheque.datacompensacao <= '2017-07-01 00:00:00')
  OR (cartaocredito.datacompensacao >= '2017-07-01 00:00:00' AND cheque.datacompensacao <= '2017-07-01 00:00:00'))

O que são as duas primeiras colunas colocadas logo depois do where ?
Elas não possuem nenhum comparador ?

Ja resolvi era a Condição OR que estava eliminando as outras condições;