\begin{frame} \frametitle{Avoid Unnecessary Duplicate Elimination} \begin{code}{\textwidth}{} \small \BUseVerbatim{query} \end{code} \ \\[.5ex] Let us assume that $\{\, \sql{first},\; \sql{last} \,\}$ is a key for \sql{Students}. \begin{enumerate} \pause \item Initialise $\mathcal{K} = \pause \{\, \sql{S.first},\; \sql{S.last},\; \sql{R.number},\; \sql{R.points} \,\}$. \pause \item [2.] $\mathcal{K} + \{\, \sql{R.category} \,\}$ because of $\sql{R.category = \textquotesingle{}homework\textquotesingle{}}$ \pause \item [4.] $\mathcal{K} + \{\, \sql{S.sid},\; \sql{S.address} \,\}$ since $\mathcal{K}$ contains a key of \sql{Students} \pause \item [3.] $\mathcal{K} + \{\, \sql{R.sid} \,\}$ because of the conjunct \sql{S.sid = R.sid} \end{enumerate} \pause Finally, $\mathcal{K}$ contains a key of \begin{itemize} \item \sql{Students S} $\{\, \sql{S.first},\; \sql{S.last} \,\}$ and \item \sql{Results R} $\{\, \sql{R.sid},\; \sql{R.cat},\; \sql{R.eno} \,\}$ \end{itemize} \pause Thus \sql{distinct} is superfluous. \pause \begin{alertblock}{} If $\{\, \sql{first},\; \sql{last} \,\}$ is not key of \sql{Students}, the test would fail.\\ Rightly so, since then the result could contain duplicates. \end{alertblock} \end{frame}