# Propagacja wartości NULL w wyrażeniach

Wartości NULL są propagowane w wyrażeniach według kilku reguł logicznych zgodnych z intuicją.

## Funkcje

Ogólna zasada jest taka, że funkcje zwracają wartość NULL, jeśli ich parametry wykraczają poza zakres zdefiniowanych wartości działania funkcji.

Przykład:

* asin(2) zwraca NULL
* log(-5) zwraca NULL
* round(A,0) zwraca NULL

Z powyższej reguły wynika, że funkcje zazwyczaj zwracają wartość NULL, jeśli dowolny z parametrów niezbędnych do obliczenia wartości jest równy NULL.

Przykład:

* sin(NULL) zwraca NULL
* chr(NULL) zwraca NULL
* if(NULL, A, B) zwraca B
* if(True, NULL, A) zwraca NULL
* if(True, A, NULL) zwraca A

Wyjątkiem od tej drugiej reguły są funkcje logiczne sprawdzające typ.

Przykład:

* isnull(NULL) zwraca True (-1)
* isnum(NULL) zwraca False (0)

### Operatory arytmetyczne i działające na ciągach znaków

Jeśli po dowolnej stronie tych operatorów napotykana jest wartość NULL, zwracana jest wartość NULL.

Przykład:

* A + NULL zwraca NULL
* A - NULL zwraca NULL
* A / NULL zwraca NULL
* A \* NULL zwraca NULL
* NULL / A zwraca NULL
* 0 / NULL zwraca NULL
* 0 \* NULL zwraca NULL
* A & NULL zwraca A

### Operatory relacyjne

Obsługa wartości NULL po dowolnej stronie operatorów relacyjnych podlega specjalnym zasadom.

Przykład:

* NULL rel.op NULL zwraca NULL
* A &lt;&gt; NULL zwraca True (-1)
* A &lt; NULL zwraca False (0)
* A &lt;= NULL zwraca False (0)
* A = NULL zwraca False (0)
* A &gt;= zwraca False (0)
* A &gt; NULL zwraca False (0)