Yo no entiendo muy del todo tu solicitud, disculpa.
Hasta lo que he podido interpretar, me he imaginado que tienes 2 tablas una llamada colx la otra sencillamente x y que ambas tienen datos en comun pero que le falta a la otra y viceversa. Y segun creo tu quieres solicitar los datos de X campo en una tabla donde estos concuerden completamente con los de la tabla Y de lo contrario no se retorne ningun valor?
Por ejemplo si la tabla X tiene de campos (1,2,3) y la tabla Y tiene de campos (1,2,4) y yo hiciese SELECT * FROM X WHERE CAMPO IN(1,2,5) no te retorne nada ya que los datos concuerdan en los valores 1 y 2 con la tbla Y pero no concuerdan con ningun 5.
Ten pendiente que los valores dentro de la funcion IN() es un rango de valores, no son valores constantes explicitos que indiquen que sino se cumplen todos retorne nada, aca es un rango si concuerdan 1 o 2 o mas se retornan estos el resto que no concuerde se obvia. (Creo que ya te diste cuenta de esto).
Entonces como la funcionalidad como tal de la funcion IN() no la puedes variar ni cambiar, tendras que hacer un rejuego de logica para llegar a tu objetivo, o hacerlo mediante un lenguaje de programacion o hacerlo mediante procedimientos almacenados. Pero suponiendo un ejemplo de tu peticion en lenguaje SQL:
Imagina un escenario de 2 tablas:
mysql> SELECT * FROM copia;
+------+-----------+
| DATA | apellidos |
+------+-----------+
| 1 | Lopez |
| 2 | Sanchez |
| 2 | Sanz |
| 5 | Heredia |
| 4 | Mendeira |
+------+-----------+
5 ROWS IN SET (0.00 sec)
mysql> SELECT * FROM ejemplo;
+-------+---------+
| datos | nombres |
+-------+---------+
| 1 | Maria |
| 2 | Juan |
| 2 | Raul |
| 3 | Ruben |
| 4 | Carlos |
+-------+---------+
5 ROWS IN SET (0.00 sec)
Supongamos que yo quiero, todos los campos 'datos' de la tabla ejemplo que tenga un rango de numeros del 1,2 y un tercer numero que me servira de variable para mi busquedad
mysql> SELECT ejemplo.* FROM ejemplo INNER JOIN copia WHERE copia.DATA = 4 AND datos IN(1,2,copia.DATA);
+-------+---------+
| datos | nombres |
+-------+---------+
| 1 | Maria |
| 2 | Juan |
| 2 | Raul |
| 4 | Carlos |
+-------+---------+
4 ROWS IN SET (0.00 sec)
En lo anterior el prefijo que mayormente se valida es el contenido de copia.data, los demas campos dentro de la funcion IN() '1 y 2' son constantes en este caso, y siempre se retornaran junto al tercer campo misterioso, siempre y cuando el tercer campo realmente exista en la tabla donde lo solicito. Por ende si existiera el numero 8 en el campo data de la tabla Copia, se va a retornar los valores unicos existentes '1 y 2' de la tabla ejemplo. Asi que mucho cuidado con esto, puesto que la validacion aca recae sobre la existencia del valor en la tablar Copia.
Ahora imaginate que hago una busquedad con un valor que Si existe en la tabla ejemplo, pero no existe en la tabla Copia:
mysql> SELECT ejemplo.* FROM ejemplo INNER JOIN copia WHERE copia.DATA = 3 AND datos IN(1,2,copia.DATA);
Empty SET (0.00 sec)
mysql> SELECT * FROM ejemplo;
+-------+---------+
| datos | nombres |
+-------+---------+
| 1 | Maria |
| 2 | Juan |
| 2 | Raul |
| 3 | Ruben |
| 4 | Carlos |
+-------+---------+
5 ROWS IN SET (0.00 sec)
El retorno es ninguno puesto que el valor 3 si existe en la tabla ejemplo, pero no existe en la tabla copia. Y aca el tercer campo misterioso que se le pasa a la funcion IN() es el valor que deseas buscar y que debe existir en realidad en la tabla copia, de lo contrario retorna nada.
Si juegas un poquito mas con la logica, podras implementar los 3 valores deseados dentro del IN() que se cumplan los 3 para retorno de valor o si falta alguno retorne nada.... todo es darle la vuelta a la logica del tema. O irse por el camino mas comodo pero un poco mas largo, 'programacion'