Ciao a tutti;

ho ereditato un applicativo che effetua un'estrazione movimenti da un db oracle e propone la visualizzazione in 2 formati differenti.
Le query che dovrebbero essere equivalenti hanno però una differenza sostanziale, ossia la seconda effettua una sorta di "distinct" non ben specificata, in quanto per movimenti identici in tutto e per tutto, ne tira fuori solo uno, mentre la prima query li mostra tutti.
Mi aiutate ad inquadrare la parte di codice colpevole di questa sorta di distinct?
Per completezza e per confronto posto entrambe le query:


--STANDARD

codice:
select cc.id_fondo||' '||cc.divisa as conto, 'B' as tipo, mb.nr_conto as conto_banca, '' as null1,         
	mb.segno_importo||mb.importo as importo, to_char(to_date(mb.data_contabile, 'dd/mm/rrrr'), 'rrrrmmdd') as data_contabile,         
	to_char(to_date(mb.data_valuta, 'dd/mm/rrrr'), 'rrrrmmdd') as data_valuta, mb.id_causale_banca as causale,         
	mb.codice_isin, '' as fiche, mb.flag_domino as stringa, '' as null2, '' as null3,         
	replace(replace(mb.descrizione, chr(10), '_'), chr(13), '_') as descrizione,         
		case when instr(commento, '<?_') <> 0 
			then replace(replace(substr(commento, instr(commento, '<?_')+13), chr(10), '_'), chr(13), '_') 
		else 
			replace(replace(commento, chr(10), '_'), chr(13), '_') end as commento,         
		case when flag_domino is not null 
			then 'SI' 
		else 
			'NO' end as stringatura  
from movimentobanca mb, contocontabilita cc, bancacontabilita bc  
where bc.nr_conto = mb.nr_conto  and bc.divisa = mb.divisa  
and bc.abi = mb.abi  and bc.nr_conto_contab = cc.nr_conto  
and flag_stato = 'A'  and to_date(mb.DATA_CONTABILE, 'dd/mm/rrrr') <= to_date('23/04/2013','dd/mm/rrrr')  
and (  ( bc.nr_conto = '123456789' and bc.abi = '01234' 
and bc.divisa = 'JPY' )  )  

union  

select cc.id_fondo||' '||cc.divisa as conto, 'A' as tipo, bc.nr_conto as conto_banca, '' as null1,         
	mc.segno_importo||mc.importo as importo,       
	to_char(to_date(mc.data_contabile, 'dd/mm/rrrr'), 'rrrrmmdd') as data_contabile,         
	to_char(to_date(mc.data_valuta, 'dd/mm/rrrr'), 'rrrrmmdd') as data_valuta,         
	mc.id_causale_contab as causale, mc.codice_isin, mc.fiche, mc.flag_domino as stringa, '' as null2, '' as null3,         
	replace(replace(mc.descrizione, chr(10), '_'), chr(13), '_') as descrizione,         
		case when instr(commento, '<?_') <> 0 
			then replace(replace(substr(commento, instr(commento, '<?_')+13), chr(10), '_'), chr(13), '_') 
		else 
			replace(replace(commento, chr(10), '_'), chr(13), '_') end as commento,         
		case when flag_domino is not null 
			then 'SI' 
		else 
			'NO' end as stringatura  
from movimentocontabilita mc, contocontabilita cc, bancacontabilita bc  
where mc.nr_conto = cc.nr_conto  and cc.nr_conto = bc.nr_conto_contab  and mc.flag_stato in ('A','C')  
and to_date(mc.DATA_CONTABILE, 'dd/mm/rrrr') <= to_date('23/04/2013','dd/mm/rrrr')  
and (  ( bc.nr_conto = 'I123456789' and bc.abi = '01234' 
and bc.divisa = 'JPY' )  )



--ACC. COMP
codice:
select cc.id_fondo||' '||cc.divisa as conto, 'B' as tipo, mb.nr_conto as conto_banca, '' as null1, mb.segno_importo||mb.importo as importo,         
	to_char(to_date(mb.data_contabile, 'dd/mm/rrrr'), 'rrrrmmdd') as data_contabile,         
	to_char(to_date(mb.data_valuta, 'dd/mm/rrrr'), 'rrrrmmdd') as data_valuta,         
	mb.id_causale_banca as causale, mb.codice_isin, '' as fiche, mb.flag_domino as stringa, '' as null2, '' as null3,         
	replace(replace(mb.descrizione, chr(10), '_'), chr(13), '_') as descrizione,         
		case when instr(commento, '<?_') <> 0 
			then replace(replace(substr(commento, instr(commento, '<?_')+13), chr(10), '_'), chr(13), '_') 
		else 
			replace(replace(commento, chr(10), '_'), chr(13), '_') end as commento,         
		case when flag_domino is not null 
			then 'SI' 
		else 
			'NO' end as stringatura  
from movimentobanca mb, contocontabilita cc, bancacontabilita bc  
where bc.nr_conto = mb.nr_conto  
and bc.divisa = mb.divisa  
and bc.abi = mb.abi  
and bc.nr_conto_contab = cc.nr_conto  
and flag_stato = 'A'  
and to_date(mb.DATA_CONTABILE, 'dd/mm/rrrr') <= to_date('23/04/2013','dd/mm/rrrr')  
and (  ( bc.nr_conto = '123456789' 
and bc.abi = '01234' and bc.divisa = 'JPY' )  )  

union  

select cc.id_fondo||' '||cc.divisa as conto, 'A' as tipo, bc.nr_conto as conto_banca, '' as null1,mc.segno_importo||mc.importo as importo,         
	to_char(to_date(mc.data_contabile, 'dd/mm/rrrr'), 'rrrrmmdd') as data_contabile,         
	to_char(to_date(mc.data_valuta, 'dd/mm/rrrr'), 'rrrrmmdd') as data_valuta,         
	mc.id_causale_contab as causale, mc.codice_isin, mc.fiche, mc.flag_domino as stringa, '' as null2, '' as null3,         
	replace(replace(mc.descrizione, chr(10), '_'), chr(13), '_') as descrizione,         
	case when instr(commento, '<?_') <> 0 
		then replace(replace(substr(commento, instr(commento, '<?_')+13), chr(10), '_'), chr(13), '_') 
	else 
		replace(replace(commento, chr(10), '_'), chr(13), '_') end as commento,         
	case when flag_domino is not null 
		then 'SI' 
	else 
		'NO' end as stringatura  
from movimentocontabilita mc, contocontabilita cc, bancacontabilita bc  
where mc.nr_conto = cc.nr_conto  
and cc.nr_conto = bc.nr_conto_contab  
and mc.flag_stato in ('A','C')  
and to_date(mc.DATA_CONTABILE, 'dd/mm/rrrr') <= to_date('23/04/2013','dd/mm/rrrr')  
and (  ( bc.nr_conto = '123456789' 
and bc.abi = '01234' and bc.divisa = 'JPY' )  )