[proofplan]
We compare the reduced simplicial chain complex of the join $K * L$ with the suspension of the [tensor product](/page/Tensor%20Product) of the reduced chain complexes of $K$ and $L$. The key point is that every simplex of $K * L$ is uniquely a union $\sigma \cup \tau$, where $\sigma$ is a simplex of $K$ or the empty simplex and $\tau$ is a simplex of $L$ or the empty simplex, not both empty. With the vertices of $K$ placed before the vertices of $L$, the simplicial boundary agrees, up to the standard suspension sign, with the tensor product differential. Taking homology and applying the algebraic [Kunneth formula](/theorems/3933) over a field gives the stated direct sum, with the suspension producing the shift $i+j=m-1$.
[/proofplan]
[step:Choose compatible vertex orders and reduced chain complexes]
Choose total orders on the vertex sets of $K$ and $L$, and order the vertices of $K * L$ by placing every vertex of $K$ before every vertex of $L$. For a finite simplicial complex $X$, let
\begin{align*}
\widetilde{C}_r(X;k)
\end{align*}
denote its reduced simplicial chain group over $k$, with $\widetilde{C}_{-1}(X;k)=k[\varnothing]$, with $\widetilde{C}_r(X;k)=0$ for $r<-1$, and with boundary map
\begin{align*}
\widetilde{\partial}^X_r:\widetilde{C}_r(X;k)\to \widetilde{C}_{r-1}(X;k).
\end{align*}
For a nonempty oriented simplex $\sigma=[v_0,\dots,v_r]$, this boundary is
\begin{align*}
\widetilde{\partial}^X_r \sigma=\sum_{a=0}^{r}(-1)^a[v_0,\dots,\widehat{v_a},\dots,v_r],
\end{align*}
where a $0$-simplex has boundary $\varnothing$, and $\widetilde{\partial}^X_{-1}(\varnothing)=0$.
Define the reduced chain complex $A_\bullet$ by
\begin{align*}
A_\bullet:=\widetilde{C}_\bullet(K;k).
\end{align*}
Define the reduced chain complex $B_\bullet$ by
\begin{align*}
B_\bullet:=\widetilde{C}_\bullet(L;k).
\end{align*}
Let $\partial^A$ and $\partial^B$ denote their differentials. Their tensor product chain complex $A_\bullet\otimes_k B_\bullet$ is the chain complex with degree-$n$ group
\begin{align*}
(A\otimes_k B)_n=\bigoplus_{p+q=n}A_p\otimes_k B_q
\end{align*}
and differential
\begin{align*}
\partial^{A\otimes B}(a\otimes b)=\partial^A a\otimes b+(-1)^p a\otimes \partial^B b
\end{align*}
for homogeneous $a\in A_p$ and $b\in B_q$.
[/step]
[step:Identify join chains with the suspension of the tensor product complex]
Let $\Sigma(A\otimes_k B)$ denote the suspension of the chain complex $A\otimes_k B$, defined by
\begin{align*}
\Sigma(A\otimes_k B)_m=(A\otimes_k B)_{m-1}
\end{align*}
with differential
\begin{align*}
\partial^{\Sigma(A\otimes B)}_m=-\partial^{A\otimes B}_{m-1}.
\end{align*}
We define a graded $k$-[linear map](/page/Linear%20Map)
\begin{align*}
\Phi_m:\widetilde{C}_m(K*L;k)\to \Sigma(A\otimes_k B)_m
\end{align*}
on basis simplices as follows. If $\sigma\in K$ has dimension $p\geq -1$, if $\tau\in L$ has dimension $q\geq -1$, and if $p+q+1=m$, then
\begin{align*}
\Phi_m(\sigma\cup\tau)=(-1)^{p+1}\sigma\otimes\tau.
\end{align*}
Here $\sigma=\varnothing$ is allowed and $\tau=\varnothing$ is allowed. If $m=-1$, then $p=q=-1$, and this rule sends the reduced empty simplex $\varnothing\in\widetilde{C}_{-1}(K*L;k)$ to $\varnothing\otimes\varnothing\in A_{-1}\otimes_k B_{-1}$.
Every nonempty simplex of $K*L$ has a unique form $\sigma\cup\tau$ with $\sigma\in K\cup\{\varnothing\}$ and $\tau\in L\cup\{\varnothing\}$, not both empty, and the reduced empty simplex has the unique representation $\varnothing\cup\varnothing$. Since $\dim(\sigma\cup\tau)=\dim\sigma+\dim\tau+1$ with $\dim\varnothing=-1$, the map $\Phi_m$ sends a basis of $\widetilde{C}_m(K*L;k)$ bijectively to a signed basis of
\begin{align*}
\bigoplus_{p+q=m-1}A_p\otimes_k B_q.
\end{align*}
Thus $\Phi_m$ is a $k$-linear isomorphism for every $m$.
[guided]
The join has exactly the right combinatorics for a tensor product, but the reduced empty simplex is essential. A simplex of $K*L$ is obtained by choosing a simplex $\sigma$ from $K$ or choosing no vertices from $K$, and choosing a simplex $\tau$ from $L$ or choosing no vertices from $L$, with the condition that we do not choose no vertices from both sides. In reduced chains, choosing no vertices is represented by the empty simplex $\varnothing$ in degree $-1$.
This is why we work with reduced chain complexes. Define
\begin{align*}
A_\bullet=\widetilde{C}_\bullet(K;k).
\end{align*}
Define
\begin{align*}
B_\bullet=\widetilde{C}_\bullet(L;k).
\end{align*}
If $\sigma$ has dimension $p$ and $\tau$ has dimension $q$, including the case $p=q=-1$ for the reduced empty simplex, then the joined simplex $\sigma\cup\tau$ has dimension
\begin{align*}
p+q+1.
\end{align*}
Therefore a chain of degree $m$ in $K*L$ corresponds to a tensor $\sigma\otimes\tau$ with
\begin{align*}
p+q=m-1.
\end{align*}
That is exactly the degree-$m$ part of the suspension of $A_\bullet\otimes_k B_\bullet$.
We define
\begin{align*}
\Phi_m:\widetilde{C}_m(K*L;k)\to \Sigma(A\otimes_k B)_m
\end{align*}
by
\begin{align*}
\Phi_m(\sigma\cup\tau)=(-1)^{p+1}\sigma\otimes\tau,
\end{align*}
where $p=\dim\sigma$. The sign is not decorative: it is chosen so that the boundary on the join matches the suspension differential. Since each nonempty simplex of $K*L$ has a unique decomposition $\sigma\cup\tau$ with not both factors empty, and since the reduced empty simplex has the unique decomposition $\varnothing\cup\varnothing$, the tensors $\sigma\otimes\tau$ form the standard basis of the tensor product chain group. Hence $\Phi_m$ is a bijection on bases and therefore a $k$-linear isomorphism.
[/guided]
[/step]
[step:Check that the identification respects the differentials]
Let $\sigma$ be a simplex of $K$ or the reduced empty simplex, let $\tau$ be a simplex of $L$ or the reduced empty simplex, and write $p=\dim\sigma$, $q=\dim\tau$, and $p+q+1=m$. If $\sigma=\tau=\varnothing$, then $m=-1$, both $\widetilde{\partial}^{K*L}\varnothing$ and $\partial^{\Sigma(A\otimes B)}(\varnothing\otimes\varnothing)$ vanish, and the chain-map identity holds in degree $-1$. Now assume at least one of $\sigma$ and $\tau$ is nonempty. With all $K$-vertices ordered before all $L$-vertices, the boundary in the join is
\begin{align*}
\widetilde{\partial}^{K*L}(\sigma\cup\tau)
=
(\widetilde{\partial}^K\sigma)\cup\tau
+
(-1)^{p+1}\sigma\cup(\widetilde{\partial}^L\tau).
\end{align*}
Applying $\Phi_{m-1}$ gives
\begin{align*}
\Phi_{m-1}\widetilde{\partial}^{K*L}(\sigma\cup\tau)
=
(-1)^p\widetilde{\partial}^K\sigma\otimes\tau
+
\sigma\otimes\widetilde{\partial}^L\tau.
\end{align*}
On the other hand,
\begin{align*}
\partial^{\Sigma(A\otimes B)}\Phi_m(\sigma\cup\tau)
=
-\partial^{A\otimes B}\left((-1)^{p+1}\sigma\otimes\tau\right).
\end{align*}
Using the tensor product differential, this becomes
\begin{align*}
\partial^{\Sigma(A\otimes B)}\Phi_m(\sigma\cup\tau)
=
(-1)^p\widetilde{\partial}^K\sigma\otimes\tau
+
\sigma\otimes\widetilde{\partial}^L\tau.
\end{align*}
Hence
\begin{align*}
\Phi_{m-1}\widetilde{\partial}^{K*L}
=
\partial^{\Sigma(A\otimes B)}\Phi_m
\end{align*}
on basis elements, and therefore on all chains. Thus $\Phi_\bullet$ is an isomorphism of chain complexes
\begin{align*}
\widetilde{C}_\bullet(K*L;k)\cong \Sigma\left(\widetilde{C}_\bullet(K;k)\otimes_k\widetilde{C}_\bullet(L;k)\right).
\end{align*}
[guided]
The only point that needs care is the sign, together with the reduced bottom degree. First consider the case $\sigma=\tau=\varnothing$. Then $m=-1$, the reduced boundary of $\varnothing\in\widetilde{C}_{-1}(K*L;k)$ is zero, and the suspension target in degree $-2$ is zero because $A_r=B_r=0$ for $r<-1$. Thus both sides of the chain-map identity are zero in degree $-1$.
Now assume at least one of $\sigma$ and $\tau$ is nonempty. Because every vertex of $K$ has been ordered before every vertex of $L$, deleting a vertex of $\sigma$ contributes the usual boundary of $\sigma$, while deleting a vertex of $\tau$ occurs after the $p+1$ vertices of $\sigma$. Therefore the terms coming from $\tau$ acquire the sign $(-1)^{p+1}$:
\begin{align*}
\widetilde{\partial}^{K*L}(\sigma\cup\tau)
=
(\widetilde{\partial}^K\sigma)\cup\tau
+
(-1)^{p+1}\sigma\cup(\widetilde{\partial}^L\tau).
\end{align*}
Now apply the map $\Phi$ to both parts. A face of $\sigma$ has dimension $p-1$, so the first term receives the sign $(-1)^p$. The second term already carries the boundary sign $(-1)^{p+1}$ from the join, and applying $\Phi$ to $\sigma\cup(\widetilde{\partial}^L\tau)$ contributes another factor $(-1)^{p+1}$. Their product is $1$. Hence
\begin{align*}
\Phi_{m-1}\widetilde{\partial}^{K*L}(\sigma\cup\tau)
=
(-1)^p\widetilde{\partial}^K\sigma\otimes\tau
+
\sigma\otimes\widetilde{\partial}^L\tau.
\end{align*}
We compare this with the suspension differential. Since
\begin{align*}
\Phi_m(\sigma\cup\tau)=(-1)^{p+1}\sigma\otimes\tau,
\end{align*}
and since the tensor product differential is
\begin{align*}
\partial^{A\otimes B}(\sigma\otimes\tau)
=
\widetilde{\partial}^K\sigma\otimes\tau
+
(-1)^p\sigma\otimes\widetilde{\partial}^L\tau,
\end{align*}
the suspension differential gives
\begin{align*}
\partial^{\Sigma(A\otimes B)}\Phi_m(\sigma\cup\tau)
=
-\partial^{A\otimes B}\left((-1)^{p+1}\sigma\otimes\tau\right).
\end{align*}
Expanding the right-hand side gives
\begin{align*}
\partial^{\Sigma(A\otimes B)}\Phi_m(\sigma\cup\tau)
=
(-1)^p\widetilde{\partial}^K\sigma\otimes\tau
+
\sigma\otimes\widetilde{\partial}^L\tau.
\end{align*}
This agrees with the image of the join boundary. Since the calculation holds on every basis simplex, $\Phi_\bullet$ is a chain isomorphism.
[/guided]
[/step]
[step:Take homology and apply the field Kunneth formula]
Taking homology of the chain isomorphism gives
\begin{align*}
\widetilde{H}_m(K*L;k)
\cong
H_m\left(\Sigma(A\otimes_k B)\right).
\end{align*}
By the definition of suspension,
\begin{align*}
H_m\left(\Sigma(A\otimes_k B)\right)
\cong
H_{m-1}(A\otimes_k B).
\end{align*}
Since $A_\bullet=\widetilde{C}_\bullet(K;k)$ and $B_\bullet=\widetilde{C}_\bullet(L;k)$ are chain complexes of $k$-vector spaces, every chain group is flat over $k$. The algebraic Kunneth formula for chain complexes over a field therefore has vanishing Tor term. Applied to $A_\bullet$ and $B_\bullet$, it gives a natural isomorphism
\begin{align*}
H_{m-1}(A\otimes_k B)
\cong
\bigoplus_{i+j=m-1}H_i(A_\bullet)\otimes_k H_j(B_\bullet).
\end{align*}
By the definition of $A_\bullet$,
\begin{align*}
H_i(A_\bullet)=\widetilde{H}_i(K;k).
\end{align*}
By the definition of $B_\bullet$,
\begin{align*}
H_j(B_\bullet)=\widetilde{H}_j(L;k).
\end{align*}
Combining these isomorphisms yields
\begin{align*}
\widetilde{H}_m(K*L;k)
\cong
\bigoplus_{i+j=m-1}\widetilde{H}_i(K;k)\otimes_k\widetilde{H}_j(L;k).
\end{align*}
The construction is independent of the preliminary replacement by disjoint isomorphic copies because a simplicial isomorphism carries each reduced basis simplex, including $\varnothing$, to the corresponding reduced basis simplex and therefore transports the chain isomorphism above. Naturality with respect to arbitrary simplicial maps follows from the naturality of the simplicial cross product and of the algebraic Kunneth isomorphism over $k$; under the standard orientation convention for the induced chain maps, the signs introduced by vertex reordering are exactly the signs in the simplicial chain functor, so the resulting homology isomorphism commutes with the maps induced by $K\to K'$ and $L\to L'$.
[/step]