when selecting from multiple tables I get a multiplication of the records When executing this query below it takes too long. And the result is too much records,
more than possibly in the database. 
The query should return around 117.000 records. That is the amount of records enterred into the database during a period of half a year. 

Why is this query multiplying, resulting in millions of records?
If someone could give me the clu where I'm stuck, I'll be very happy.

/* Formatted on 2011/08/05 17:09 (Formatter Plus v4.8.7) */
SELECT   t2.flag, t3.reg_number, t1.reportdate, t1.latitude, t1.longitude,
     t1.value2 course, ((t1.measspeed) * 3.6) / 1.852, t1.status alarms
FROM traffic t1, details t2, registernumbers t3
WHERE     t1.mobileno = t2.mobile
     AND t2.mobile = t3.mobileno
     AND UPPER (t2.flag) = UPPER ('BEL')
     AND t1.reportdate BETWEEN '1/jan/2011' AND '1/jul/2011'
     AND (latitude &gt; 52 AND longitude &gt; 2)
     AND latitude &gt; 48
  OR (latitude &lt; 52 AND longitude &gt; 2)
  OR (latitude &gt; 52 AND longitude &lt; 2)
ORDER BY reportdate DESC


Thanks in advance,

Maarten
The part of the filter that performs the join is t1.mobileno = t2.mobile AND t2.mobile = t3.mobileno. For that to be sensible, it is likely that you need two of the following three statements to be true:


mobileno is unique in traffic
mobile is unique in details
mobileno is unique in registernumbers


Because the join is returning more rows than you expect, I guess this is not the case. For further help we'll need to know the DDL for the tables (in particular the primary keys)

---EDIT

on second thoughts, I think 

WHERE     t1.mobileno = t2.mobile
     AND t2.mobile = t3.mobileno
     AND UPPER (t2.flag) = UPPER ('BEL')
     AND t1.reportdate BETWEEN '1/jan/2011' AND '1/jul/2011'
     AND (latitude &gt; 52 AND longitude &gt; 2)
     AND latitude &gt; 48
  OR (latitude &lt; 52 AND longitude &gt; 2)
  OR (latitude &gt; 52 AND longitude &lt; 2)


needs to have some more brackets:

WHERE     t1.mobileno = t2.mobile
     AND t2.mobile = t3.mobileno
     AND UPPER (t2.flag) = UPPER ('BEL')
     AND t1.reportdate BETWEEN '1/jan/2011' AND '1/jul/2011'
     AND (latitude &gt; 52 AND longitude &gt; 2)
     AND ( latitude &gt; 48 
           OR (latitude &lt; 52 AND longitude &gt; 2) 
           OR (latitude &gt; 52 AND longitude &lt; 2) )


although some of the conditions seems to be redundant