Bueno, el campo precio_ref en el
where sólo puede compararse con un valor, por eso el mensaje de error que te dice que la subcosulta devuelve más de un valor. Es decir, piensa en el
update como que recorre uno a uno todos los registros y, por cada uno, ejecuta la subconsulta y compara el valor de precio_ref con lo que devuelve dicha subconsulta. Pero so hay más de un registro en la subconsulta, ¿con cuál compararía?
Para solucionar esto, tendrías que restringir la subconsulta para que te devuelva sólo el valor que corresponda al registro actual, por ejemplo:
Código SQL
[-]
update captura
set precio_dif = 'X'
where precio_ref <> (
select precio_ref from requerimiento
where
licitacion='LA-019GYR047-T25-2010' and
requerimiento.col1 = captura.col1 and
requerimiento.col2 = captura.col2
)
Pero, aun esto dependerá de que en tu tabla requerimiento no se repitan registros con los mismos valores de col1 y col2. Podrían repetirse, pero no para la misma licitación.
// Saludos