Basic join implementation