Ya, menggunakan salah satu dari berikut ini:
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);
... tidak sargable. Mereka akan bekerja, tetapi melakukan yang terburuk dari opsi yang tersedia.
Jika Anda hanya memiliki satu parameter, IF/ELSE dan pernyataan khusus yang terpisah adalah alternatif yang lebih baik.
Opsi selanjutnya setelah itu adalah SQL dinamis. Tetapi pengkodean SQL dinamis tidak berguna jika Anda membawa predikat non-sargable pada contoh pertama. SQL Dinamis memungkinkan Anda untuk menyesuaikan kueri sambil mengakomodasi banyak jalur. Tapi itu juga berisiko injeksi SQL, jadi itu harus dilakukan di belakang kueri berparameter (sebaiknya di dalam prosedur/fungsi tersimpan dalam paket.