En Firebird disponemos de una función llamada COALESCE() la cual nos devuelve el primero de sus argumentos que no sea NULL. Por ejemplo, si queremos consultar el precio de venta de los productos y que nos diga que es cero cuando en dicha columna tengamos NULL podríamos escribir algo como.

SELECT
   COALESCE(PRD_PREVTA, 0) AS PRD_PREVTA
FROM
   PRODUCTOS

Entonces, si el precio de venta no es NULL obtendremos el precio de venta. Y si es NULL obtendremos el número cero.

En Visual FoxPro disponemos de una función llamada ISNULL() la cual podríamos usarla también con el mismo objetivo, escribiendo algo como:

PRD_PREVTA = iif(IsNull(PRD_PREVTA), 0, PRD_PREVTA)

y conseguiríamos exactamente lo mismo, o sea tener en la columna PRD_PREVTA el precio de venta del producto o el número cero si en esa columna está guardado NULL.

¿Cuál de las dos formas es mejor, cuál es la preferible?

La primera forma es la preferible por tres motivos:

    1. Funcionará en TODOS los programas que escribamos en Visual FoxPro
    2. Funcionará en TODOS los programas que escribamos en cualquier lenguaje de programación (C, C++, Java, Delphi, PHP, etc.)
    3. Funcionará en TODOS los stored procedures y triggers que escribamos en Firebird

Conclusión:

En general no deberíamos usar la función ISNULL() en Visual FoxPro porque usar la función COALESCE() del Firebird es mejor ya que trabajará para todos los programas que escribamos en cualquier lenguaje y para todos los stored procedures y triggers que escribamos en Firebird.

Este consejo es el mismo sea cual sea el lenguaje que utilices sólo que en ese caso lo más probable es que la función no se llame ISNULL() sino que tenga algún otro nombre.