Que yo sepa no hay ningún límite, por lo menos en los gestores de bases de datos SQL con los que he trabajado (MySQL, SQL Server, Oracle...). ¿Has revisado bien la consulta por si se tratase de un error en la misma en lugar de una limitación del sistema?.
En cualquiera de los casos una consulta con una cláusula in de más de 23 elementos empieza a ser complicada de leer, así que te recomendaría que estudiases la posibilidad (según los requerimientos del problema que intentas solucionar) de usar una tabla temporal para insertar en ella los criterios de búsqueda y simplificar de esa manera la consulta que quieras hacer, me explico:
Código:
--Esta es la tabla donde quiero hacer la búsqueda
create table tabla (campo int)
--Esta es la tabla temporal en la que guardaré los criterios del "in"
create table #criterios_busqueda (campo int)
go
--Este bucle es para añadir datos de prueba
declare @i as int set @i = 0
while (@i < 50)
begin
set @i = @i + 1
--En la tabla "tabla" inserto los números del 1 al 50
insert tabla (campo) values (@i)
--En la tabla "#criterios_busqueda" sólo inserto del 1 al 25
if (@i <= 25)
insert #criterios_busqueda (campo) values (@i)
end
--Le pido que me muestre de "tabla" sólo los que estén entre el 1 y el 25
select * from tabla where campo in
(select campo from #criterios_busqueda)
--Esta parte del script elimina las tablas del ejemplo
drop table tabla
drop table #criterios_busqueda