Null
Null（ヌル、ナル）は、何もない、という意味で、プログラミング言語などコンピュータ関係では、「何も示さないもの」を表すのに使われる。同様のものに、nil が使われることもある。他の名前のこともある。
本来 はドイツ語において数値の0（ゼロ）を意味する単語であり、ドイツ語における発音は である。一方、英語においては と発音される。
日本においては原語に近い「ヌル」という発音が定着しているが、英語読みに近い「ナル」という発音で呼ばれる場合もある（専門書、国家試験など）。
プログラミング言語などにおいて、codice_1やcodice_2といった予約語や定数名のものなどの意味がどういったものかは言語により、場合によっては実装ごとに違う。ポインタや参照のある言語では、ヌルポインタなどと呼ばれる何も指さない特別なポインタであることもあるし、Pythonのようにオブジェクトのこともある。古典的なLISPのように真理値の偽（の代表）や空リスト「codice_3」を兼ねたもの（それらと同じもの）だったりすることもある。
ラテン語で「無」を意味する に由来する。nil もラテン語の の短縮形に由来する。
英語では はコンピュータに限らず使われ、しばしば または と交換可能である。例えば、 は （零行列）、 は （空集合）と同義である。
ポインタや参照が無効であることを示す。C言語では無効ポインタを表現するため値0のポインタが用いられ、マクロ定義によってこれを扱った。
またC言語の後継たるC++ではC言語から引き継ぎcodice_4マクロ定義が存在する。
しかし、これは整数の0と型の上では同じになるため、しばしばオーバーロードの呼び間違いが生じることとなった。これを解消するためC++11では専用のcodice_5キーワードが導入された。
C++以後の言語ではnullを最初から専用構文として導入した事例が多い。
Pythonではcodice_6という名前で、その値は組込みオブジェクトである。バージョン2.4からcodice_6には代入できなくなった。Rubyではcodice_2というキーワードで、意味は組込みオブジェクトである。LISPではcodice_9で、どれでも同じようなものだが実体の詳細は様々で、carやcdrをとるとそれぞれでまたnilが返ってくる実装もあればエラーになる実装もある（普通はnilかどうかをまずテストして、carやcdrしないようにする）。
構文上、nullは多くの言語で特別なnullリテラルという扱いだが、リテラルのための型「null型」（またはNull型､NULL型とも）が規定される言語が存在する。null型の値はnullのみが許される。
プログラム言語の文法上null型が存在するケースでは、一般的な型同様にnull型を用いることが出来るが、null型を扱えない言語も存在する。
例えばJavaでは「null型」はあるが、扱うことはできない。言語仕様では、nullリテラルはnull型であり、null型には名前がなく、null型の変数宣言やnull型へのキャストをすることは不可能である、という扱いとなっている。以上より、null型は存在するが、構文などの上でそれを扱うことができず、その値を表すリテラルのみが存在する。
nullデバイスは、存在しない架空のデバイスを表す。不要なデータストリームは、nullデバイスに出力すると、実際はどこにも出力されず廃棄される。
UNIXやLinuxでは/dev/null、MS-DOSやMS WindowsではNULで表される。
データベースのNULLは、欄が空欄であることを示す。これは人が読む用の表（ひょう）のNAにあたり、C言語のNULLよりは浮動小数点演算のNaN（非数）に近い。
具体的にはNULLには、未知・不明 (Unknown) の場合と適用不能・非存在 (Not Applicable, Inapplicable) の場合がある。例えば、名前がNULLの場合、未知のNULLは「名前はあるが分からない」ということを、適用不能のNULLは「名前が存在しない」（例えば、独身者の配偶者の名前）ことを示す。これはエドガー・F・コッドによる分類だが、彼はさらに詳細な分類をしている。
なおそれらに対し、名前欄が空文字列の場合は、（事前の取り決めがなければ）名前はあり、知っていて、欄に書かれている通り「」であることを示す。未知や適用不能のために、空文字列、文字列 'UNKNOWN'、0、-1、9999年12月31日、未使用のコードなど特定のありえない値を例外値として使うことがしばしばあるが、それらは実際の値であるとして処理されてしまう危険がある。
NULLはNULL値（あるいは空値）と呼ばれることもあるが、コッドによると値ではない（特殊な値や例外的な値ではない）。値ではないので型もない。整数型の列にあるNULLも文字列型の列にあるNULLも同じNULLであり、NULL整数・NULL文字列などの区別はない。内部的にはNULLは、（NaNやヌルポインタのような）特定のビット列ではなく、値とは別個の「NULLかどうか」を表すメモリ領域で管理されていることが多い。
NULLを含む演算の多くは結果がNULLとなる。例えば
はいずれもNULLである（0で割っても0除算は発生しない）。これは浮動小数点演算でNaNを含む式の結果がNaNになるのと似た規定である。この規定によりNULLを許容する演算は煩雑になりやすくなることから、データーベース・ベンダーによる拡張が行われている場合がある。この問題は、WHERE句でNULLでありうる列を診断しようとしたとき、特にDELETEやUPDATEで悲惨な結果を呼ぶことがある。回避方法は、NULLが混入する可能性を充分に検討し、IS NULL 演算子を駆使して式を慎重に組み立てる以外にない。
ただし少なからず場合に、NULLを含む演算で結果がNULL以外になる。このためNULLは無制限には伝播しない。ただししばしば、NULLの絡んだ演算の実装は不完全で、処理系依存が多い。
比較・IN述語など論理値を返すべき場面では、NULLを含む結果は UNKNOWN となる。UNKNOWN は、値ではないNULL（あるいは「不明 Unknown のNULL」）とは異なり TRUE（真）・FALSE（偽）に並ぶ第3の論理値である。例えば
などはいずれもUNKNOWNになる。ただし、UNKNOWNの扱いにもNULLに似た難しさがある。
論理式でNULLとならない場合がある。
はそれぞれFALSE、TRUEである（NULL AND TRUE、NULL OR FALSE がNULLになるのとの違いに注意）。
Oracleは空文字列とNULLを区別しないため、NULL あるいは空文字列を含む演算で非標準な結果となることがある。例えば、文字列と NULL を連結すると本来は NULL になるが、Oracleでは文字列の値を変えない（ただし NULL 同士の連結は NULL になる）。
テーブルの各列には、NULLを保持できないと指定することができる。例えば、全ての行で必ず異なる値が含まれなければならないと指定されている列であっても、複数の行がNULLを保持できてしまう。そこで、この列にNULLを保持できないと指定すればこの問題が回避できる。
ソートでは、NULLはいかなる値よりも小さいとして扱われる（ただしOracleは逆にいかなる値よりも大きいとして扱われるが、オプションで変更できる）。しかし論理値でのソートが実装されていれば、以下のように IS (NOT) NULL を第1のソートキーに使ってNULLを先または後に変更できる。
また、CASE式やCOALESCE関数（あるいはOracleならNVL関数も可）を使って、NULLに任意の値を割り当ててソートすることができる。以下の句はいずれも、colがNULLならば0を割り当ててソートする。