Vous avez dit que vous ne vouliez pas, mais :utilisez une table temporaire. C'est la bonne solution ici.
L'analyse des requêtes coûte cher dans Oracle, et c'est ce que vous obtiendrez lorsque vous placerez des milliers d'identifiants dans un bloc géant de SQL. En outre, il existe limites mal définies sur la longueur de la requête que vous allez frapper. Faire un anti-JOIN contre une table, par contre... Oracle est bon pour ça. Charger des données en masse dans une table, Oracle est également bon dans ce domaine. Utilisez une table temporaire.
Limitation IN
à un millier d'entrées est un contrôle de santé mentale. Le fait que vous le touchiez signifie que vous essayez de faire quelque chose de fou.