Ja, med något av följande:
WHERE m.id_pk = NVL(n_RequiredId, m.id_pk);
WHERE m.id_pk = COALESCE(n_RequiredId, m.id_pk);
WHERE (n_RequiredId IS NULL OR m.id_pk = n_RequiredId);
...är inte sargable. De kommer att fungera, men presterar det sämsta av de tillgängliga alternativen.
Om du bara har en parameter är IF/ELSE och separata, skräddarsydda uttalanden ett bättre alternativ.
Nästa alternativ efter det är dynamisk SQL. Men att koda dynamisk SQL är värdelös om du överför de icke-sargerbara predikaten i det första exemplet. Dynamisk SQL låter dig skräddarsy frågan samtidigt som du tar emot många sökvägar. Men det riskerar också SQL-injektion, så det bör utföras bakom parametriserade frågor (helst inom lagrade procedurer/funktioner i paket.