Con permiso del compañero gnzsoloyo:
 
P1 y P2 son alias para la tabla PRODUCTOS ya que tienes una especie de relación circular  
Código:
 FROM productos P1 INNER JOIN productos P2 
  en cuanto al error de tu consulta, este se debe a que cuando pones esto:  
no especificas a qué tabla se refiere el campo VALOR, y este existe tanto en P1 como en P2, por lo tanto  es necesario que especifiques también el alias de la tabla correspondiente.  
Código:
 P1.VALOR = 'mediana'             o             P2.VALOR = 'mediana'
  Ahora bien, no entiendo qué ID es el que tiene que regresar tu consulta, puedes probar con esto, pero no sé si es lo que estás buscando    
Código MySQL:
Ver original- Query OK, 0 rows affected (0.83 sec) 
-   
-     -> (1, 1, 1, 'ROJO'), 
-     -> (2, 1, 1, 'VERDE'), 
-     -> (3, 2, 1, 'PEQUEÑA'), 
-     -> (4, 2, 1, 'MEDIANA'); 
- Query OK, 4 rows affected (0.14 sec) 
-   
-     -> where-  T1.VALOR  = 'VERDE' and-  T2.VALOR  = 'MEDIANA';
 
- +---------+ 
- | PROD_ID | 
- +---------+ 
- |       1 | 
- +---------+ 
T1 y T2 al igual que P1 y P2 son alias de la misma tabla. 
Si no es lo que quieres obtener te pediría que nos explicaras mejor cuál es la salida que estás esperando. 
Saludos.
Leo.