De um modo geral, se o
IN
list fica muito grande (para algum valor mal definido de 'muito grande' que geralmente está na região de 100 ou menor), torna-se mais eficiente usar uma junção, criando uma tabela temporária, se necessário, para armazenar os números. Se os números forem um conjunto denso (sem lacunas - o que os dados de exemplo sugerem), você poderá fazer ainda melhor com
WHERE id BETWEEN 300 AND 3000
. No entanto, presumivelmente há lacunas no conjunto, e nesse ponto pode ser melhor seguir a lista de valores válidos (a menos que as lacunas sejam relativamente poucas em número, caso em que você pode usar:
WHERE id BETWEEN 300 AND 3000 AND id NOT BETWEEN 742 AND 836
Ou quaisquer que sejam as lacunas.