\begin{frame} \frametitle{Null Values: Problems} \begin{goal}{} SQL uses a \textbf{three-valued logic: true, false, unknown}!\\ Any comparison with \sql{null} yields the value \emph{unknown}.\\ \remark{% For users accustomed to two-valued logic, the outcome is often surprising. } \end{goal} \medskip \begin{quiz}{\textwidth}{Which of these queries return rows with \sql{null} in column A?} \begin{enumerate} \item \sql{select * from R where A = 42} \item \sql{select * from R where not (A = 42)} \item \sql{select * from R where A = null} \end{enumerate} \end{quiz} \pause None of these queries does! \begin{goal}{} To get the rows with \sql{null} values, use \sql{... where A is null}. \end{goal} \pause\medskip \begin{alertblock}{} Some languages do not know about null values. \\ \remark{% Explicit null value check and treatment required when reading attribute values into program variables. This complicates application programs. } \end{alertblock} \end{frame}