Diferencia de rendimiento: condición colocada en la cláusula INNER JOIN vs WHERE

Di que tengo una mesaorder como

id | clientid | type | amount | itemid | date
---|----------|------|--------|--------|-----------
23 | 258      | B    | 150    | 14     | 2012-04-03
24 | 258      | S    | 69     | 14     | 2012-04-03
25 | 301      | S    | 10     | 20     | 2012-04-03
26 | 327      | B    | 54     | 156    | 2012-04-04
clientid es una clave foránea de nuevo a laclient mesaitemid es una clave foránea de nuevo a unaitem mesatype es soloB oSamount es un número entero

y una mesaprocessed como

id | orderid | processed | date
---|---------|-----------|---------
41 | 23      | true      | 2012-04-03
42 | 24      | true      | 2012-04-03
43 | 25      | false     | <NULL>
44 | 26      | true      | 2012-04-05     

Necesito obtener todas las filas deorder eso por lo mismoclientid en el mismodate tener oponentetype valores. Tenga en cuentatype solo puede tener uno de dos valores:B oS. En el ejemplo anterior esto sería filas23 y24.

La otra restricción es que la fila correspondiente enprocessed debe sertrue Para elorderid.

Mi consulta hasta ahora

SELECT c1.clientid,
       c1.date,
       c1.type,
       c1.itemid,
       c1.amount,
       c2.date,
       c2.type,
       c2.itemid,
       c2.amount

FROM   order c1
INNER JOIN order c2 ON c1.itemid    =  c2.itemid AND
                       c1.date      =  c2.date   AND
                       c1.clientid  =  c2.clientid AND
                       c1.type     <>  c2.type AND
                       c1.id        <  c2.id

INNER JOIN processed p1 ON p1.orderid   =  c1.id AND
                         p1.processed =  true
INNER JOIN processed p2 ON p2.orderid   =  c2.id AND
                         p2.processed =  true

PREGUNTA: Manteniendo elprocessed = true como parte de la cláusula de unión está ralentizando la consulta hacia abajo. Si lo muevo a la cláusula WHERE, el rendimiento es mucho mejor. Esto ha despertado mi interés yMe gustaria saber por que.

Las claves primarias y las columnas de clave externa respectivas se indexan mientras que las columnas de valor (value, processed etc) no son.

Descargo de responsabilidad: he heredado esta estructura de base de datos y la diferencia de rendimiento es de aproximadamente 6 segundos.

Respuestas a la pregunta(1)

Su respuesta a la pregunta