La seconda e le successive risposte forniscono un metodo per farlo senza vincolare due volte il valore di ricerca:
SELECT * FROM ROUTERS
WHERE coalesce(ROUTER_ADDRESS, '') = coalesce( ?, '');
Nota che ciò richiede un valore fittizio che non può mai essere un valore di colonna valido (che è "fuori banda"); Sto usando la stringa vuota. Se non disponi di tale valore, dovrai accettare di vincolare il valore due volte:
SELECT * FROM ROUTERS
WHERE ROUTER_ADDRESS = ? or (ROUTER_ADDRESS is null and ? is null);